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

XSLT Need Help converting XML to show the value and the attribute

我的第一个 post 在这里,但是,

我有一个 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>>

我需要它看起来像下面这样,

<COMPANY>LR</COMPANY>
<CONTRACT CODE>L1935</CONTRACT CODE> 

等等等等....

我正在尝试使用 XSLT 对此进行排序,到目前为止,我已经设法提取了名称部分,但我无法获取值。

到目前为止我的脚本看起来像...

<?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>

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

你好!

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

<xsl:value-of select="."/>

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

translate(./@Name,' ','')

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

<xsl:element name="{translate(./@Name,' ','')}"/>

最终代码如下所示:


<?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>