JDOM2,xmlns(xsd)可以更改或从XML文档中删除

时间:2017-09-30 14:16:21

标签: java xml xsd jdom-2

我没有xml文档的xsd文件,所以我必须更改为默认的xmlns“http://www.w3.org/2001/XMLSchema-instance”以解析XML元素,但是当我更改root元素的xmlns属性时会出现问题(myroot)在子元素(data)中创建另一个属性(xmlns),其值为“myxsd.xsd”。 我想忽略或更改xmlns(myxsd.xsd)的值来正确解析文档。

我的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>

我的XML输出:

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);

}

我的代码:

 int numA = 12;
 int numB = 21 ;

 string secondPartofNumA = numA.ToString().Select(q => new string(q,1)).ToArray()[1]; // first digit
 string firstPartofNumB = numB.ToString().Select(q => new string(q,1)).ToArray()[0]; // second digit

 string resultAsString = secondPartofNumA + firstPartofNumB;
 int resultAsInt = Convert.ToInt32(resultAsString);

 Console.WriteLine(resultAsString);
 Console.WriteLine(resultAsInt);

1 个答案:

答案 0 :(得分:1)

我真的不明白为什么要将元素移动到不同的命名空间(尤其是命名空间http://www.w3.org/2001/XMLSchema-instance,而不是用于此目的),但是如果你想这样做,你必须改变所有的元素,而不仅仅是最外层的元素。尽管名称空间声明仅存在于最外层元素上,但它具有将所有元素放在此命名空间中的效果,除非您更改它们,否则它们将保留在该命名空间中。