我在这里的第一篇文章,但在这里,
我有一个从我们的扫描系统输出的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>
ETC等......
我正在尝试使用XSLT对此进行排序,并且到目前为止已经设法拔出了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">
<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
由于
克里斯
答案 0 :(得分:1)
以下是一种可能的解决方案:
<?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>
请注意,元素名称中不能包含空格。因此,在转换过程中,我用下划线_
答案 1 :(得分:0)
Helo!
您可以使用以下内容获取当前处理元素的值:
<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>