0

名前空間の操作に問題があります。

以下のように入力を取得します。

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

      <Org xmlns="http://mysample.org" >
        <Dept>
            <Person>
                <FirstName>Sample </FirstName>
                <LastName> Sampel L </LastName>
                <Address>
                    <Street>Sample Street</Street>
                    <House>45 Block C </House>
                    <State>Kentucky</State>
                    <AddExtension>
                        <ns3:LandMark xmlns:ns3="http://mysample.org" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                            <ns3:POI tag="temp">Sample POI </ns3:POI>
                        </ns3:LandMark>                         
                    </AddExtension>
            </Person>
        </Dept>
      </Org>

この XML のすべての要素に名前空間プレフィックスを追加する必要があります。

以下の XSL を試しました。

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:ns3="http://mysample.org">

    <xsl:output omit-xml-declaration="no" indent="yes" />
    <xsl:strip-space elements="*" />

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

    <xsl:template match="*"> 
        <xsl:element name="ns3:{name()}" namespace="http://mysample.org">
            <xsl:copy-of select="@*"></xsl:copy-of>
            <xsl:copy-of select="namespace::*" />
            <xsl:apply-templates select="node()" />
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

しかし、入力 XML の AddExtension データが原因で問題が発生しています」

注: 「AddExtension」内のデータは、スキーマに従って xsd:any タグに基づいています。したがって、入力 XML ごとに異なるデータになります。

どうすればこれを克服できますか?

助けてください。

4

2 に答える 2

1

代わりにこのテンプレートを試してください:

<xsl:template match="*"> 
    <xsl:element name="ns3:{local-name()}" namespace="{namespace-uri()}">
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates select="node()" />
    </xsl:element>
</xsl:template>
于 2012-12-18T08:25:57.183 に答える
0

あなたの現在の試みは、ドキュメント内のすべての要素を名前空間に書き出しhttp://mysample.org、明示的な (つまり空でない) 名前空間プレフィックスを付けています。すでにその名前空間にある要素に対してのみこれを行うことを本当に望んでいると思います。そう

  1. 既存のテンプレートを からmatch="*"に変更しますmatch="ns3:*"
  2. 他の名前空間 (その名前空間に使用) の要素を処理するテンプレートを追加して、match="*"それらを変更せずにコピーするだけです。
于 2012-12-18T02:41:26.083 に答える