2016-06-14 3 views
2

XSLT 1.0を使用してXMLの要素の順序を変更しようとしています。以下はXMLの小さなスニペットですXML要素の並べ替えが機能しないXSLT

<RIMSDB1 xmlns="http://kiris.nps21.org/xsd"> 
    <ROW> 
     <ReportID>1</ReportID> 
     <WKYMD>20160610</WKYMD> 
     <RunSystemDate>20160610032048</RunSystemDate> 
    </ROW> 
    <ROW> 
     <ReportID>2</ReportID> 
     <WKYMD>27869</WKYMD> 
     <RunSystemDate>495876043985778649</RunSystemDate> 
    </ROW> 

これは私がそれを変換するために使用しているXSLTです。私は私が順番に変化を取得していないが、私は、私は正しい変換を、取得

<RIMSDB1 xmlns="http://kiris.nps21.org/xsd"> 

から=「http://kiris.nps21.org/xsd」のxmlnsを削除する変換時に

<xsl:template match="*/ROW"> 
<xsl:copy> 
    <xsl:apply-templates select="@*" /> 
    <xsl:apply-templates select="WKYMD" /> 
    <xsl:apply-templates select="RunSystemDate" /> 
    <xsl:apply-templates select="ReportID" /> 
</xsl:copy> 

問題があります次のとおりです。

<RIMSDB1> 

    <ROW> 
    <WKYMD>20160610</WKYMD> 
    <RunSystemDate>20160610032048</RunSystemDate> 
    <ReportID>1</ReportID> 
</ROW> 
    <ROW> 
    <WKYMD>27869</WKYMD> 
    <RunSystemDate>495876043985778649</RunSystemDate> 
    <ReportID>2</ReportID> 
</ROW> 

再注文する方が良い場合は、誰でも何が起こっているのかを明らかにすることができます。

ありがとうございます。

答えて

2

ソースドキュメントにxmlns="http://kiris.nps21.org/xsd"が含まれている場合、すべての要素(名前空間接頭辞または優先する名前空間宣言なし)はその名前空間を継承し、名前空間http://kiris.nps21.org/xsdにバインドされます。名前空間接頭辞がないときに気づいたり理解したりすることは時々困難です。

XSLTを調整して、その名前空間に接頭辞を付けて、その要素に適切に対処するために名前空間接頭辞を使用するように選択式と一致式を調整する必要があります。例えば

:マッズ・私のために働いたが、私はいくつかの他の問題に遭遇した@

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:k="http://kiris.nps21.org/xsd" 
    version="1.0"> 
    <xsl:template match="*/k:ROW"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*" /> 
      <xsl:apply-templates select="k:WKYMD" /> 
      <xsl:apply-templates select="k:RunSystemDate" /> 
      <xsl:apply-templates select="k:ReportID" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

。 ' \t \t \t \t例えば、親と子の両方のタグで名前空間にこれを処理するにはどうすればよいです\t \t \t \t \t \t \t \t 20160610032048 \t \t \t \t \t \t \t \t \t \t \t \t \t 495876043985778649 \t \t \t ' –

+0

その例では、要素のウィットh xmlns = ""はネームスペースなし "に置かれています。そして、それとその子孫はdocument要素で宣言された名前空間にありません。 "名前空間なし"の場合は、選択/一致式に名前空間接頭辞を使用しません。 –

+0

入力が標準ではなく、要素がバインドされる/どの名前空間にバインドされているかわからない場合は、local-name()を気にするより一般的な一致式を使用することができます。 uri()。例えば、* [local-name()= 'WKYMD'] –

関連する問題