Я использую XSLT для преобразования определенного xml, который содержит все значения, сформированные как атрибуты для другого xml, сохраняя значения в качестве дочернего элемента. В моем xml есть два имени детей, один - aa, а другой - bbb. Преобразование работает отлично, когда я проверяю значения как для aa, так и для bbb. Проблема в том, что я хочу удалить/игнорировать атрибуты, найденные в родительском элементе этих дочерних элементов.при преобразовании атрибутов в элемент с XSLT, как игнорировать только атрибуты в родительском элементе
Я показываю ниже два значительных шага, которые я пробовал до сих пор. Первая из них - моя оригинальная идея, но я хочу, чтобы она избегала родительских атрибутов (именно «cod» и «package» в моем xml).
Второе - это следствие поиска, но оно действительно отходит от того, что я хочу. Тем не менее, вторая пробная версия может помочь мне выразить, что, вероятно, мне не хватает ни одного «шаблона» или «комманды», чтобы пропустить атрибуты из корневого элемента.
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)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="/*">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
out1.xml (я не хочу элемент трески в первом пункте ни я не хочу пакет и треска во втором пункте)
<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"/>
Это довольно сбивает с толку: можете ли вы опубликовать точный результат, который вы ** хотите получить **? –