属性として構成されたすべての値を含む特定のxmlを別のxmlに変換して値を子要素として保持するにはXSLTを使用します。私のXMLには2つの子供の名前があり、1つはaaで、もう1つはbbbです。 aaとbbbの両方の値をチェックすると、変換は完全に機能しています。問題は、これらの子要素の親要素にある属性を削除/無視したいということです。属性をXSLTで要素に変換する方法親要素の属性のみを無視する方法
私は今までに試した2つの重要な仮説の下に示しています。最初の1つは私の元々のアイデアですが、私はそれを親属性(正確に "cod"と "xml"のパッケージ)を避けたいです。
2回目は検索の結果ですが、実際は私が望むものから遠ざかります。それにもかかわらず、2番目の試行は、私がおそらくルート要素から属性をスキップするための特定の "パターン"またはいくつかの "comand"のいずれかが不足していることを表現するのを助けることができます。
MyApp.java
Path f = Paths.get("C:\\in1.xsl");
//Path f = Paths.get("C:\\in2.xsl");
InputStream resourceAsStream = Files.newInputStream(f);
StreamSource xsl = new StreamSource(resourceAsStream);
Transformer transformer;
transformer = TransformerFactory.newInstance().newTransformer(xsl);
StreamSource in = new StreamSource(
new FileInputStream("C:\\my_xml.xml"));
StreamResult out = new StreamResult(System.out);
transformer.transform(in, out); //in1 produced out1 and in2 produced out2
my_xml.xml
<c:product xmlns:c="myapp">
<c:item cod="789">
<c:aa name="024" value="123"/>
<c:bbb name="0105" value="123456"/>
<c:bbb name="0122" value="T"/>
<c:aa name="071" value="00000001"/>
</c:item>
<c:item package="123" cod="11111">
<c:aa name="002" value="753"/>
<c:aa name="003" value="456"/>
<c:bbb name="0146" value="147852"/>
</c:item>
</c:product>
in1.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" standalone="no" omit-xml-declaration="yes"/>
<xsl:template match="@*">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
in2.xls(ソースCopy XML file contents except for root node and attribute XSLT)
out1.xml(私は最初の項目でタラの要素をしたくないどちらも、私は2番目の項目にパッケージ化し、タラたい)
<c:product xmlns:c="myapp">
<c:item>
<cod>789</cod>
<c:aa>
<name>024</name>
<value>123</value>
</c:aa>
<c:bbb>
<name>0105</name>
<value>123456</value>
</c:bbb>
<c:bbb>
<name>0122</name>
<value>T</value>
</c:bbb>
<c:aa>
<name>071</name>
<value>00000001</value>
</c:aa>
</c:item>
<c:item>
<package>123</package>
<cod>11111</cod>
<c:aa>
<name>002</name>
<value>753</value>
</c:aa>
<c:aa>
<name>003</name>
<value>456</value>
</c:aa>
<c:bbb>
<name>0146</name>
<value>147852</value>
</c:bbb>
</c:item>
</c:product>
out2.xml(まあ、私が撮ってみましたここで、単一のポイントがあります私の自己を表現する利点:ルート要素は異なる扱いを受けます。私はそれらの属性を無視してルート要素を扱い、in.xlsの残りの部分と混合する方法を見つけた場合、私はおそらく)私の解決策を発見するでしょう
<aa name="024" value="123"/>
<bbb name="0105" value="123456"/>
<bbb name="0122" value="T"/>
<aa name="071" value="00000001"/>
<aa name="002" value="753"/>
<aa name="003" value="456"/>
<bbb name="0146" value="147852"/>
これはむしろ混乱しています。**あなたが望む正確な出力を投稿できますか? –