XSLT需要帮助转换XML以显示值和属性

XSLT需要帮助转换XML以显示值和属性,xml,xslt,transformation,Xml,Xslt,Transformation,我的第一篇文章在这里,但这里是 我有一个从扫描系统输出的XML文档,如下所示 <?xml version="1.0" encoding="UTF-8"?> <DOCUMENT> <DOCUMENTINDEX Name="Company">LR</DOCUMENTINDEX> <DOCUMENTINDEX Name="Contract Code">L1935</DOCUMENTINDEX> <DOCUMENT

我的第一篇文章在这里,但这里是

我有一个从扫描系统输出的XML文档,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>  
<DOCUMENTINDEX Name="Company">LR</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Contract Code">L1935</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Entry Date">2016-11-14</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Order Account">04060</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Order Raised By">Jonathan Banks</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Order Total">358</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Purchase Order Date">2016-11-14</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Purchase Order ID">PC022987-1</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Supplier Code">04060</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="Supplier Name">Dynahurst Limited</DOCUMENTINDEX>
  <DOCUMENTINDEX Name="VAT">71.6</DOCUMENTINDEX>
</DOCUMENT>>
谢谢


克里斯

这里有一个可能的解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz '" />
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'" />

    <xsl:template match="/*">
        <xsl:for-each select="DOCUMENTINDEX">
            <xsl:variable name="name" select="@Name" />
            <xsl:element name="{translate($name, $smallcase, $uppercase)}"><xsl:value-of select="text()"/></xsl:element>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

请注意,元素名称中不能有空格。因此,在转换的过程中,我用下划线替换它们

您可以通过以下方式获取当前处理元素的值:

XML元素名称对于空格无效,因此您可以使用以下方法删除它们:

翻译(./@Name,,'')

您可以使用构造函数创建XML元素,并在其中提供其名称:

最终代码如下所示:



谢谢菲利普,这让我们走上了正确的道路,我们现在已经按照我们想要的方式工作了。非常感谢你的帮助!!!谢谢,没问题!
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
        <xsl:apply-templates select="//DOCUMENTINDEX"/>
</xsl:template>

<xsl:template match="DOCUMENTINDEX">
    <br/><xsl:value-of select="@Name"/>
</xsl:template>
Company
Contract Code
Entry Date
Order Account
Order Raised By
Order Total
Purchase Order Date
Purchase Order ID
Supplier Code
Supplier Name
VAT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz '" />
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'" />

    <xsl:template match="/*">
        <xsl:for-each select="DOCUMENTINDEX">
            <xsl:variable name="name" select="@Name" />
            <xsl:element name="{translate($name, $smallcase, $uppercase)}"><xsl:value-of select="text()"/></xsl:element>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates select="//DOCUMENTINDEX"/>
    </xsl:template>
    <xsl:template match="DOCUMENTINDEX">
        <xsl:element name="{translate(./@Name,' ','')}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>