1

这应该很简单,我读到的所有内容都说 select = "name" 应该在 xml 文档中选择所有具有 "name" 的节点。所以我试图做一个简单的例子。这是 XML :(它是一个简单的清单应用程序)。

<?xml version="1.0"?>
<inventory type="inventory">
<item type="zone" CanAdd="true">
    <title>Building</title>
    <item type="porch" CanAdd="true">
        <title>Porch</title>
    </item>
    <item type="receptionRoom" CanAdd="true">
        <title>Reception Room</title>
        <item type="doorInfo" CanAdd="true">
            <title>Door</title>
            <item type="doorStyleType" select="multi">
                <title>Door Style</title>
                <item>
                    <title>Internal</title>
                </item>
                <item>
                    <title>Plain</title>
                </item>
            </item>
            <item type="doorWinMaterialType" select="single">
                <title>Door Material</title>
                <item type="softwoodColours" select="single">
                    <title>Softwood - Stained</title>
                    <item>
                        <title>Stained Pine</title>
                    </item>
                </item>
            </item>
            <item type="doorwinFurnitureType" select="multi">
                <title>Door Furniture</title>
                <item>
                    <title>Door Handle</title>
                </item>
                <item>
                    <title>LetterBox Opening</title>
                </item>
            </item>
        </item>
    </item>
</item>
<propertyName><![CDATA[2 Street, Village]]></propertyName>
<propertyRef><![CDATA[15p9]]></propertyRef>
</inventory>

.. 我需要开始用 XSLT 处理它。(在页面后面的 C# 代码中 - 该位起作用并将结果抛出到弹出窗口中。)

我正在使用的 XSLT 是:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
            >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
    <div>
            <h2>My Inventory</h2>
            <table border="1">
                <tr>
                    <td>
                    <xsl:value-of select="inventory/propertyName" />
                    </td>
                </tr>
            <xsl:for-each select ="item">
                <tr>
                    <td>
                        <xsl:value-of select="."/>
                    </td>  
                </tr>
            </xsl:for-each>
            </table>
        <p>Hello world</p>
   </div>
</xsl:template>
</xsl:stylsheet>

在 for-each 循环中找不到“item”节点,我想我已经遇到了心理障碍。我敢肯定,当您知道答案时,答案非常简单,但是目前我还没有并且需要先解决这个问题,然后才能继续说。输出是:(在浏览器中)..

My Inventory
2 Street, Village 
(I expect a list of the "item" node values here in table rows..)
Hello world

非常感谢,布雷特

4

1 回答 1

0

item您为循环指定的 XPath<xsl:for-each>是相对于当前节点进行评估的,即相对于文档根。为了选择<item>文档中任何嵌套深度的任何元素,您必须使用

//item

但是,我认为您想要一些稍微不同的东西,因为<item>元素本身的文本就是它们<title>的文本以及任何嵌套<item>元素的文本。您可能正在寻找:

//item/title

直接回应你的句子

我读到的所有内容都说 select = "name" 应该在 xml 文档中选择所有带有 "name" 的节点

这是不正确的。select="name"选择当前节点的子节点列表中名为“name”的所有元素,而不是 Xml 文档中的任何位置。

于 2012-08-08T13:05:13.083 回答