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>
我的第一个 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>