JDOM2, xmlns (xsd) не могут изменить или удалить из документа XML

У меня нет xsd-файла в xml-документе, поэтому я должен изменить xmlns по умолчанию " http://www.w3.org/2001/XMLSchema-instance", чтобы проанализировать элементы XML, но при этом возникает проблема, когда Я изменяю атрибут xmlns корневого элемента (myroot), другой атрибут (xmlns) создается в дочернем элементе (data) со значением "myxsd.xsd". Я хочу игнорировать или изменить значение xmlns (myxsd.xsd), чтобы правильно проанализировать документ.

Мой вход XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<myroot xmlns="myxsd.xsd" class="15">
    <data att1="all" att2="actual">
        <myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value">
            <p name="p1">page1</p>
            <p name="p2">page1</p>
            <p name="p3">page1</p>
            <p name="p4">page4</p>
        </myobject>
    </data>
</myroot>

Мой вывод XML:

<?xml version="1.0" encoding="UTF-8"?>
<myroot xmlns="http://www.w3.org/2001/XMLSchema-instance" class="15">
  <data xmlns="myxsd.xsd" att1="all" att2="actual">
    <myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value">
      <p name="p1">page1</p>
      <p name="p2">page1</p>
      <p name="p3">page1</p>
      <p name="p4">page4</p>
    </myobject>
  </data>
</myroot>

Мой код:

public void Edit_file() throws JDOMException, IOException {

    InputStream in = new FileInputStream("C:\\small_test.xml");

    SAXBuilder builder = new SAXBuilder();
    Document document = builder.build(in);

    // getting the root element
    Element root = document.getRootElement();
    Namespace tempNamespace = Namespace.getNamespace("http://www.w3.org/2001/XMLSchema-instance");
    root.setNamespace(tempNamespace);


    // iterating over the children
    List<Element> data = root.getChildren("data");

    for (Element element : data) {

        Attribute id = element.getAttribute("att1");
        id.setValue("New value");
    }
    XMLOutputter xmlOutput = new XMLOutputter();

    xmlOutput.setFormat(Format.getPrettyFormat());
    xmlOutput.output(document, System.out);

}

1 ответ

Решение

Я не очень понимаю, почему вы хотите переместить элементы в другое пространство имен (особенно в пространство имен http://www.w3.org/2001/XMLSchema-instance(который не предназначен для этой цели), но если вы хотите сделать это, вы должны изменить все элементы, а не только самый внешний. Хотя объявление пространства имен присутствует только в самом внешнем элементе, оно приводит к тому, что все элементы помещаются в это пространство имен, и они останутся в этом пространстве имен, если вы не измените их.

Другие вопросы по тегам