1

誰かが私に次のxsltの理由を説明できますか?

<xsl:if test="EventDocument">

このxmlタグを取得しませんか?

<EventDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.itron.com/ItronInternalXsd/1.0/">

タグから属性を削除すると機能しますが、これは意味がありません。

IE入力を次のように変更すると、上記のテストに合格します。

<EventDocument>

xslt 2.0(saxon parser)を使用しています。よろしくお願いします。

4

2 に答える 2

2

xmlns「予約属性」です。これは、名前空間プレフィックスから完全ノードの名前空間へのマッピングの定義です。XMLの「 xmlns 」とはどういう意味ですか?

つまり、あなたの場合のノードの実際の名前はですが、 (「EventDocument」という名前のノードと空の名前空間)"http://www.itron.com/ItronInternalXsd/1.0/" EventDocumentを選択しようとしています。"" EventDocument

XPathエンジンに応じて、次のいずれかが必要です。

  • 名前空間プレフィックスのマッピングを名前空間に渡します
  • 名前空間とノード名に明示的な一致を使用します。*[namespace-uri()="http://www.itron.com/ItronInternalXsd/1.0/" and local-name()=="EventDocument"]
  • チートしてノード名を一致させる*[local-name()=="EventDocument"]

local-nameおよびhttp://www.w3.org/TR/xpath/#section-Node-Set-Functionsnamespace-uriで説明されています)。

于 2013-01-17T17:06:09.627 に答える
2

デフォルトでは、XPath式の接頭辞のない要素名は名前空間のない要素を参照するため、式EventDocumentはローカル名が「EventDocument」で名前空間のない要素を選択します。The

<EventDocument ... xmlns="http://www.itron.com/ItronInternalXsd/1.0/">

http://www.itron.com/ItronInternalXsd/1.0/名前空間にあるため、要素はこのパターンと一致しません。

どちらか2つの選択肢があります

  1. その名前空間をスタイルシートのプレフィックスにバインドしてから、XPath式でプレフィックスを使用するか、または
  2. (XSLT 2.0を使用していると言っているので)xpath-default-namespace

1の例

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns:itron="http://www.itron.com/ItronInternalXsd/1.0/"
       version="2.0">

  <xsl:template match="itron:example">
    <xsl:if test="itron:EventDocument">....</xsl:if>
  </xsl:template>
</xsl:stylesheet>

2の例

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xpath-default-namespace="http://www.itron.com/ItronInternalXsd/1.0/"
       version="2.0">

  <xsl:template match="example">
    <xsl:if test="EventDocument">....</xsl:if>
  </xsl:template>
</xsl:stylesheet>

私の個人的な好みは、将来スタイルシートを維持しなければならない人のための「驚き最小の原則」に基づいたオプション1です(元の作成者を含み、数か月の休憩後にコードに戻ります...)。

于 2013-01-17T17:18:32.083 に答える