0

内容が XML ドキュメントである文字列があります。

文字列の例を次に示します。

String xmlContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
"<Service oem=\"myOem\" agent=\"myAgent\" version=\"0.5.5.0\" build=\"30-01-2014-11-46\" />";

この文字列を NodeList に変換したいと思います。Google 検索でこの記事にたどり着きました。

次のコードを試しました:

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xmlContent));
Document doc = db.parse(is);
NodeList oNodeService = doc.getElementsByTagName("Service");

問題は、「db.parse(is)」行で裂けることです。問題は、このメソッドが XML 属性をサポートしていないことです。

エラーメッセージは次のとおりです。

[Fatal Error] :1:70: Element type "Service" must be followed by either attribute specifications, ">" or "/>".
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 70; Element type "Service" must be followed by either attribute specifications, ">" or "/>".
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at PkgNetAccelerator32.MainEvents.ShowHtsInfo(MainEvents.java:1575)

この XML 文字列を NodeList に正常に変換するにはどうすればよいですか?

更新: うーん、失敗は XML 文字列に固有のものです。上記の短縮版を提供しました。クラッシュを引き起こさないすべての属性を削除しました。

String xmlContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Service hostname=\"sarah-linux.localdomain\"uname=\"Linux sarah-linux.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux\" />";

推測を危うくするなら、それはピリオドまたはダッシュだと思います。このアップデートを最初に入手したかったのです。

4

1 に答える 1

0
    String xmlContent = "<System><rpm-items><rtmap-items><Rule-list><name>RoutingPolicy3</name></Rule-list></rtmap-items></rpm-items></System>";
    InputStream isr = new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8));
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(isr);

    NodeList ruleList = doc.getElementsByTagName("System");
于 2021-12-20T05:38:17.253 に答える