0

名前空間 xmlns="http://www.yahoo.com/xmlns/ApplicationTest" を追加すると

<?xml version="1.0" xmlns="http://www.yahoo.com/xmlns/ApplicationTest" encoding="UTF-8"?>

私の投稿の usa11.xml と usa22.xml の両方で:

XSLT を使用して、ある XML ファイルの情報を別の XML ファイルのオプション情報で更新する

xslt は期待される結果を出力できないようです。これがなくても完璧に動作します xmlns="http://www.yahoo.com/xmlns/ApplicationTest"

XSLを使用して修正する方法を教えてください??

ありがとう'

4

2 に答える 2

2

名前が名前空間に属する XML データ内の要素を参照する必要がある場合は、スタイルシートでその名前空間にプレフィックスを割り当てる必要があります。スタイルシート内で、XSLTは、デフォルトの定義がある場合でも、XPath 式または一致パターンで接頭辞のない名前を持つすべての要素を名前空間がないと見なします。xmlns="http://..."

だからあなたは次のようなものを書く必要があります

xmlns:app="http://www.yahoo.com/xmlns/ApplicationTest"

次に、ターゲット XML データ内のノードへのすべての参照の前に、新しい名前空間を付けますapp:root

あなたのライブデータを見ずに、より良い例を挙げることはできません。それが明確であることを願っています。

于 2013-05-06T18:34:04.337 に答える
1

前の回答のスタイルシートを機能させるには、スタイルシートに名前空間宣言を (接頭辞付きで) 追加し、すべてのノード名に新しい名前空間接頭辞を使用します。

したがって、これは次のようにする必要があります。

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:y="http://www.yahoo.com/xmlns/ApplicationTest"
                >

    <xsl:variable name="u2" select="document('usaa22.xml')"/>
    <xsl:template match="y:city">
        <xsl:choose>
            <xsl:when test="$u2//y:city[y:street=current()/y:street]">
                <xsl:copy>
                    <xsl:apply-templates select="$u2//y:city[y:street=current()/y:street]/* " />
                </xsl:copy>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:apply-templates select="@* | node() " />
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

注意: あなたの xml の変更は正しくないようです:

<?xml version="1.0" xmlns="http://www.yahoo.com/xmlns/ApplicationTest" encoding="UTF-8"?>

プロローグは<?xml名前空間を許可しません。
名前空間は、xml ファイルの最初の要素に追加する必要があります。

<country xmlns="http://www.yahoo.com/xmlns/ApplicationTest">
于 2013-05-06T18:57:43.997 に答える