1

我是 Java 世界的新手,正在努力解析其中包含属性的 XML 字符串。

谁能帮我解析这个并获取所有数据?我的 XML 字符串可以根据 NumOfParams 更改大小。

下面是 XML:

<PictureManager>
   <FuncName>DisplayImage</FuncName>
   <NumOfParams>2</NumOfParams>
   <Parameters>
      <Param type="integer">10</Param>
      <Param type="String">C://Me.jpg</Param>
   </Parameters>
</PictureManager>

我还需要能够从 XML 中获取“整数”和“字符串”属性。XML 字符串可以根据 < NumOfParams>增大或缩小

如果您可以发布一些实际使用上述标签创建 XML 字符串的代码,这将有很大帮助。

提前致谢。

4

2 回答 2

1

我的建议是从基本步骤开始:

首先,您可能需要考虑您的 xml 文件连接:url?当地的?其次,您需要实例化一个 DocumentBuilderFactory 和一个构建器

DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

或者

URLConnection conn = new URL(url).openConnection(); InputStream inputXml = conn.getInputStream();

DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); 文档 xmlDoc = docBuilder.parse(inputXml);

下一步是解析 XML 文件:

文档 xmlDom = dBuilder.parse(xmlFile);

之后,它将 xml 文件转换为 DOM 或 Tree 结构,您必须逐个节点遍历才能获取AttributesContent。在您的情况下,您需要获取内容。这是一个例子:

String getContent(Document doc, String tagName){
        String result = "";

        NodeList nList = doc.getElementsByTagName(tagName);
        if(nList.getLength()>0){
            Element eElement = (Element)nList.item(0);
            String ranking = eElement.getTextContent();
            if(!"".equals(ranking)){
                result = String.valueOf(ranking);
            }

        }
        return result;
    }

getContent(xmlDom,"NumOfParams") 的返回是“2”。

解析简单的 xml 文件后,您可以尝试遍历所有 xml 文件并将其打印出来。然后接触 SAX 或 JAXB。

祝你好运

于 2014-02-04T14:17:44.157 回答
1

在 java 库中存在解析 XML 文档的方法。例如这个:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource xml = new InputSource();
    xml.setCharacterStream(xmlSTring);
    Document doc = db.parse(xml);
    NodeList nodes = doc.getElementsByTagName("PictureManager");

    // iterate objects 
    for (int i = 0; i < nodes.getLength(); i++) {
       Element element = (Element) nodes.item(i);
       .
       .
       .
    }
于 2013-10-15T22:15:52.233 回答