1

これは単純である必要があり、私が読んだすべてのことは、select = "name" が xml ドキュメント内の "name" を持つすべてのノードを選択する必要があることを示しています。アプリ)。

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

「item」ノードが for-each ループに見つからず、その理由について精神的なブロックにぶつかったと思います。あなたがそれを知っているとき、答えは非常に単純だと確信していますが、現時点では、いわば先に進む前にこれを解決する必要がありません。出力は次のとおりです: (ブラウザで)..

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"Xml ドキュメントのどこにもない、現在のノードの子ノードのリストにある「name」という名前のすべての要素を選択します。

于 2012-08-08T13:05:13.083 に答える