XSLT-更改XML格式和可重用性

本文关键字:更改 XML 格式 XSLT- | 更新日期: 2023-09-27 18:03:10

我可以使用一些帮助与我的XML转换,我已经看到了其他类似的问题,但由于我的XML模式是有点尴尬,我有麻烦应用它。

这是我的XML格式

<root>
  <row>
  <var name="Name" value="Rusell" />
  <var name=" Surname" value=" Anthony" />
  <var name=" Country" value=" UK" />
  <var name=" Job" value="Web Designer" />
  <var name=" Cabin" value="345" />
 </row>
  <row>
  <var name="Name" value="Wolf" />
  <var name=" Surname" value=" Werner" />
  <var name=" Country" value=" Germany" />
  <var name=" Job" value="Linux IT" />
  <var name=" Cabin" value="234" />
 </row>
</root>

这就是我想要的样子,这样我就可以很容易地访问字段。

<root>
 <row name="Rusell" surName="Anthony" country="UK" job="Web Designer" cabin="345" />
 <row name="Wolf" surname="Werner" country="Germany" job="Linux IT" cabin="234" />
</row>

我已经在格式化方面取得了进展,这是我到目前为止所得到的-没有插入值。

<root>
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
<row Name="" Surname="" Country="" Job="" Cabin="" />
</root>

这是我的XSLT文件-您将注意到,对于一些属性,当使用value-of select时,我使用了不同的语法,这只是为了显示我所尝试的内容。

<xsl:template match="/">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="row">
<row>
<xsl:attribute name="Name">
<xsl:value-of select="value"/>
</xsl:attribute>
<xsl:attribute name="Surname">
<xsl:value-of select="row/root/name/value"/>
</xsl:attribute>
<xsl:attribute name="Country">
<xsl:value-of select="root/row/value"/>
</xsl:attribute>
<xsl:attribute name="Job">
<xsl:value-of select="@value"/>
</xsl:attribute>
<xsl:attribute name="Cabin">
<xsl:value-of select="value"/>
</xsl:attribute>
</row>
</xsl:template>

同样,关于可重用性问题,当我知道字段和属性时,上述方法是好的,但我将接受不同的XML文件,可能有更多的字段,如地址,年龄。

那么我该如何创建一个XSLT文件呢?

For each Node = root/row
Create row = (value@name & value@value)

。E与我在上面尝试做的相同,但可重用,因为我不需要知道名称值(姓氏,船舱等),所以它适用于我的第一个XML文件和以下文件。

<root>
  <row>
  <var name="differentName" value="x" />
  <var name="anotherdifferentname" value="y" />
 </row>
  </root>

如果我需要更清楚地告诉我,请提前告诉我并感谢。

XSLT-更改XML格式和可重用性

应该可以了

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
  <xsl:template match="row">
    <row>
      <xsl:apply-templates select="var"></xsl:apply-templates>
    </row>
  </xsl:template>
  <xsl:template match="var">
    <xsl:variable name="attributeName" select="@name">
    </xsl:variable>
    <xsl:attribute name="{$attributeName}">
      <xsl:value-of select="@value"/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>