【问题标题】:Selecting XML nodes by XSL with nested for-each select使用嵌套的 for-each 选择通过 XSL 选择 XML 节点
【发布时间】:2012-11-09 13:34:43
【问题描述】:

我们需要将 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>

我们将不胜感激。谢谢

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    你想要

    <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>
    

    【讨论】:

    • 是的,非常接近,但我希望 标签在 2 列表中显示它们的属性...我该怎么做?
    • @user1292411:通过提出一个新的、单独的 SO 问题。您当前的问题已得到完全回答 - 因此您可以接受此答案 - 通过单击答案旁边的复选标记。
    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 2015-01-25
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2016-10-09
    相关资源
    最近更新 更多