我想阅读,但无法弄清楚......
这是文件:
<MBusData>
<SlaveInformation>
<Id>5000619</Id>
<Manufacturer>SBC</Manufacturer>
<Version>19</Version>
<Medium>Electricity</Medium>
<AccessNumber>254</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>686648</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>686648</Value>
</DataRecord>
<MBusData>
这里是拒绝工作的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="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="Datarecord">
<xsl:value-of select="@Value"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我尝试用以下方式运行它:
xsltproc xslfile xmlfile
希望你能帮忙......
答案 0 :(得分:2)
首先,您的XML输入格式不正确:最后一个<MBusData>
标记需要是结束标记</MBusData>
。
接下来,这个:
<xsl:template match="/">
<xsl:for-each select="Datarecord">
什么都不选。您位于/
根节点的上下文中,并且没有Datarecord
个元素是/
的子元素。此外,XML区分大小写,Datarecord
与DataRecord
不同。所以你需要将其更改为:
<xsl:template match="/">
<xsl:for-each select="MBusData/DataRecord">
最后,Value
是Datarecord
的孩子,而非属性 - 所以您需要更改此内容:
<xsl:value-of select="@Value"/>
为:
<xsl:value-of select="Value"/>
THX,它有效,但如果我只想阅读一个具体内容,该怎么办? DataRecord,比方说id =“1”?
然后你不应该使用for-each
。相反,尝试:
<xsl:template match="/">
<xsl:value-of select="MBusData/DataRecord[@id='1']/Value"/>
</xsl:template>