Изменение имени узла xml-узла с Java

5 ответов

Использование Document.renameNode :

NodeList nodes = document.getElementsByTagName("tag1");
for (Node eachNode: nodes) {
  document.renameNode(eachNode, null, "reallyCoolTag");
}
30
ответ дан 1 December 2019 в 08:42
поделиться

Для этого можно использовать XSL-преобразование (XSLT):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="*"> <!-- match anything -->
    <xsl:copy>
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="tag1"> <!-- switch the element name -->
    <xsl:element name="reallyCoolTag">
      <xsl:copy-of select="@*" />
      <xsl:apply-templates />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

Это можно использовать с пакетом javax.xml.transform (Java 1.4 и выше):

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer(new StreamSource(
    new File("RenameTag.xslt")));
transformer
    .transform(new DOMSource(document), new StreamResult(System.out));

См. DOMResult , если вы хотите получить документ в качестве вывода.

2
ответ дан 1 December 2019 в 08:42
поделиться

Ваш tag1 недействителен. У него нет закрытия>. Также следует указать атрибуты. Должно получиться так:

<someRootElement>
<tag1>
    <tag2 
        someKey="someValue"
        someKey2="someValue2"
    />
    <tag3/>
    <tag4
        newKey="newValue"
        newKey2="newValue2"
    />
</tag1>
</someRootElement>

Попробуйте использовать исправленный XML. Должно сработать.

0
ответ дан 1 December 2019 в 08:42
поделиться

Просто вызовите setName ("reallyCoolTag") для элементов, которые вы хотите переименовать. Нет необходимости копировать детей; атрибут name элемента является изменяемым полем.

0
ответ дан 1 December 2019 в 08:42
поделиться

Поскольку вы получили атрибуты:

NamedNodeMap nnm = nodes.item(i).getAttributes();

и добавили эти атрибуты к новому элементу,

вы должны получить дочерние элементы nodes.item (i) и установите их в новом узле.

Вы можете использовать, например:

neu.addContent(nodes.item(i).getChildren());
0
ответ дан 1 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: