我很难从XML列表中选出1个结果,然后使用我的XSL文档对其进行转换。
原始XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
<data>
<index id="TimeStamp"></index>
<index id="GUID"></index>
<index id="DOC-GUID"></index>
<index id="RapportNr">074531</index>
<index id="SessionId"></index>
<index id="ClientType"></index>
<index id="WSClientIp">::1</index>
<index id="ClientIp"></index>
<index id="ClientVersion">4.0</index>
<index id="ClientId"></index>
<index id="DeviceIP"></index>
<index id="DeviceID"></index>
<index id="DeviceName"/>
<index id="DeviceModel"></index>
<index id="DeviceLocation"/>
<index id="IsDuplexScan">False</index>
<index id="Printer"></index>
<index id="PrintCount">1</index>
<index id="PrintEnabled">False</index>
<index id="Image Name">074531.tif</index>
</data>
转换XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- Main output node -->
<xsl:template match="/DrivveImage/Documents/Document">
<!-- Start of the output -->
<data>
<!-- Call field template for each 'Field' node -->
<xsl:for-each select="/data/index">
<xsl:call-template name="Field"/>
</xsl:for-each>
<!-- Output for 'Document' node attribute 'File' -->
<index id="RapportNr">
<value>
?????????
</value>
</index>
</data>
<!-- End of the output -->
</xsl:template>
<!-- Field template -->
<xsl:template name="Field">
<!-- This is the actual output - what ever you need per field -->
<index>
<xsl:attribute name="id"><xsl:value-of select="@name"/> </xsl:attribute>
<!-- Output of the field text value -->
<xsl:value-of select="."/>
</index>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><data>
<index id="RapportNr">
<value>
074531 should be here....
</value>
</index>
</data>
我尝试使用Value-of select和Copy-of但似乎没有什么对我有用。 所以我现在问这里是否有人可以帮我处理我的代码。
谢谢!
// Jorki
答案 0 :(得分:0)
我认为你太复杂了。以下应该足够了:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="index[@id = 'RapportNr']">
<xsl:copy>
<xsl:copy-of select="@*"/>
<value>
<xsl:value-of select="."/>
</value>
</xsl:copy>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
我不确定XSLT中的/DrivveImage/Documents/Document
指的是什么,因为我在文档的任何地方都没有看到,但这应该是你想要做的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Drivve">
<xsl:apply-templates select="Documents/Document/data" />
</xsl:template>
<xsl:template match="data">
<xsl:copy>
<xsl:apply-templates select="index[@id = 'RapportNr']" />
</xsl:copy>
</xsl:template>
<xsl:template match="processing-instruction()" />
</xsl:stylesheet>
在样本输入上运行时,会产生:
<?xml version="1.0" encoding="utf-8"?>
<data>
<index id="RapportNr">074531</index>
</data>