通过嵌套for-each选择XSL选择XML节点

时间:2012-11-09 13:34:43

标签: xml xslt

我们需要将xml消息转换为更易读的格式,因此我尝试添加一些XSL。 我很难以我想要的方式列出所有内容。

我对XSL很陌生,所以可以提供一些帮助。

这是XML文件的一部分:

<biotronik-ieee11073-export format-version="3.0" creator="BioProgrammerConverter" creator-version="3.1">
<dataset>
    <section name="MDC">
        <section name="ATTR">
            <section name="PT">
                <value name="SEX" type="String">0</value>
            </section>
        </section>
        <section name="IDC">
            <section name="PG">
                <value name="TYPE" type="MDC_IDC_ENUM_PG_TYPE">IPG</value>
                <value name="MODEL" type="String">Evia DR-T</value>
                <value name="SERIAL" type="String">xxxxxxxx</value>
                <value name="MFG" type="MDC_IDC_ENUM_MFG">BIO</value>
                <value name="IMPLANT_DT" type="DateTime">20091126</value>
            </section>
            <section name="LEAD">
                <value name="MODEL" type="String">4524</value>
                <value name="MFG" type="MDC_IDC_ENUM_MFG">MDT</value>
                <value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
                <value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RA</value>
                <value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>
            </section>
            <section name="LEAD">
                <value name="MODEL" type="String">T 44 F</value>
                <value name="MFG" type="MDC_IDC_ENUM_MFG">ELA</value>
                <value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
                <value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RV</value>
                <value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>
            </section>

在某种程度上,我想在node = IDC

下显示所有标签

我试过跟随XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Biotronics Results</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Test</th>
<th>Value</th>
</tr>
<xsl:for-each select="/biotronik-ieee11073-export/dataset/section[@name='MDC']/section[@name='IDC']">
<xsl:for-each select="section">
<xsl:for-each select="value">
<tr>
<td><xsl:value-of select="value"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

你想要

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:copy-of select="//section[@name='IDC']//value"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时:

<biotronik-ieee11073-export format-version="3.0" creator="BioProgrammerConverter" creator-version="3.1">
    <dataset>
        <section name="MDC">
            <section name="ATTR">
                <section name="PT">
                    <value name="SEX" type="String">0</value>
                </section>
            </section>
            <section name="IDC">
                <section name="PG">
                    <value name="TYPE" type="MDC_IDC_ENUM_PG_TYPE">IPG</value>
                    <value name="MODEL" type="String">Evia DR-T</value>
                    <value name="SERIAL" type="String">xxxxxxxx</value>
                    <value name="MFG" type="MDC_IDC_ENUM_MFG">BIO</value>
                    <value name="IMPLANT_DT" type="DateTime">20091126</value>
                </section>
                <section name="LEAD">
                    <value name="MODEL" type="String">4524</value>
                    <value name="MFG" type="MDC_IDC_ENUM_MFG">MDT</value>
                    <value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
                    <value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RA</value>
                    <value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>
                </section>
                <section name="LEAD">
                    <value name="MODEL" type="String">T 44 F</value>
                    <value name="MFG" type="MDC_IDC_ENUM_MFG">ELA</value>
                    <value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
                    <value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RV</value>
                    <value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>
                </section>
            </section>
        </section>
    </dataset>
</biotronik-ieee11073-export>

产生了想要的正确结果:

<value name="TYPE" type="MDC_IDC_ENUM_PG_TYPE">IPG</value>
<value name="MODEL" type="String">Evia DR-T</value>
<value name="SERIAL" type="String">xxxxxxxx</value>
<value name="MFG" type="MDC_IDC_ENUM_MFG">BIO</value>
<value name="IMPLANT_DT" type="DateTime">20091126</value>
<value name="MODEL" type="String">4524</value>
<value name="MFG" type="MDC_IDC_ENUM_MFG">MDT</value>
<value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
<value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RA</value>
<value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>
<value name="MODEL" type="String">T 44 F</value>
<value name="MFG" type="MDC_IDC_ENUM_MFG">ELA</value>
<value name="POLARITY_TYPE" type="MDC_IDC_ENUM_LEAD_POLARITY_TYPE">BI</value>
<value name="LOCATION" type="MDC_IDC_ENUM_LEAD_LOCATION_CHAMBER">RV</value>
<value name="CONNECTION_STATUS" type="MDC_IDC_ENUM_LEAD_STATUS">Connected</value>