2

xslt を使用して、ある xml 形式から別の xml 形式に変換する必要があります。しかし、名前空間 xmlns="http://ws.wso2.org/dataservice" を試してみると、指定された xml ファイルで xmlns:d="http://ws.wso2.org/dataservice" のようなプレフィックスがないと機能しません

<test xmlns="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

のように xsl 変換後に xml ファイルが必要です

<head>
<names>Name</names>
<names>karthik</names>
</head>

xsltを手伝ってください

私はxsltを試しました

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
     <namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>


    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

2

以下のリストを変更してください: 1. 入力 XML の形式が正しくありません。ルート要素を 2 に変更してください。不要なため、XSLT から<testcsv> 削除してください。<namespace-alias stylesheet-prefix="xsl" result-prefix="#default"/>3. 入力 XML に名前空間 xmlns:d="http://ws.wso2.org/dataservice" を追加します。

入力 XML:

<?xml version="1.0"?>
<testcsv xmlns:d="http://ws.wso2.org/dataservice">
 <datarows>
  <name>Name</name>
 </datarows>
 <datarows>
  <name>karthik</name>
 </datarows>
 </testcsv>

XSLT 変換:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:d="http://ws.wso2.org/dataservice" exclude-result-prefixes="d" >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/">
    <head>
        <xsl:for-each select="testcsv/datarows">
            <names>
                <xsl:value-of select="name" />
            </names>
        </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>

出力:

<head>
  <names>Name</names>
  <names>karthik</names>
</head>
于 2013-04-18T05:51:26.927 に答える
1

私が理解しているように、xml の xmlns 宣言を変更する (または変更できない) ことはありません (おそらく別の場所で生成されているため)。xlst で xml ノード プレフィックスを使用する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:d="http://ws.wso2.org/dataservice"
    exclude-result-prefixes="d"
    >
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
        <head>
            <xsl:for-each select="d:testcsv/d:datarows" >
                <names>
                    <xsl:value-of select="d:name" />
                </names>
            </xsl:for-each>
        </head>
    </xsl:template>
</xsl:stylesheet>
于 2013-04-18T08:59:57.097 に答える