簡體   English   中英

Xml在Java標記之間的XML數據之間進行解析

[英]Xml parsing for in between xml data with tags in java

XML解析XML數據之間

我的java String對象中有一個XML字符串,如下所示:

<Record>
    <op>Add</op>
    <sensdata>400188711111</sensdata>
    <id>4</id>
    <a1>1111201090467034</a1>
</Record>

如果我需要之間的數據

<Record> </Record>

<op>Add</op>
<sensdata>4001887XXXXX</sensdata>
<id>4</id>
<a1>1111201090467034</a1>

我可以使用xml解析器嗎? 我能夠獲得類似Add40018871111141111111201090467034的值。 但是沒有標簽。

以下是我的代碼段

ByteArrayInputStream stream = new ByteArrayInputStream("<Record><op>Add</op><sensdata>400188711111</sensdata><id>4</id><a1>1111201090467034</a1></Record>".getBytes());
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(stream);
NodeList sensdata = document.getDocumentElement().getElementsByTagName("sensdata");
String sensitiveData = sensdata.item(0).getTextContent();

用我嘗試過的解決方案編輯我的問題:

我做了如下:

ByteArrayInputStream stream = new ByteArrayInputStream(toBeParsed.getBytes());
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(stream);      
NodeList XmlTagNodeList = document.getDocumentElement().getElementsByTagName(XmlTag);
Document newXmlDocument = DocumentBuilderFactory.newInstance()
        .newDocumentBuilder().newDocument();
for (int i = 0; i < XmlTagNodeList.getLength(); i++) {
    Node node = XmlTagNodeList.item(i);
    Node copyNode = newXmlDocument.importNode(node, true);
    newXmlDocument.appendChild(copyNode);
}

DOMImplementationLS domImplementationLS = (DOMImplementationLS) newXmlDocument.getImplementation();
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
record = lsSerializer.writeToString(newXmlDocument);
System.out.println(record);

它為每個記錄打印以xml標記開頭的記錄。

請告訴我,這是個好方法嗎? 而且我不需要xml標記。 如何擺脫這個?

如果您嘗試使用標簽和內容從字面上輸出XML,則可以使用javax.xml.transform。*上提供的Transformer API來實現。

TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // I prefer to have the <?xml ?> tag
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // Indent the code
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // Original encoding
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); // Indent 4 spaces

// write the XML of a single node to an OutputStream
transformer.transform(new DOMSource(node),  new StreamResult(new OutputStreamWriter(out, "UTF-8")));

這是您需要的嗎?

編輯(遍歷節點):

// Your previous code
LSSerializer lsSerializer = domImplementationLS.createLSSerializer();
StringBuilder builder = new StringBuilder();
NodeList children = newXmlDocument.getChildNodes();
for(int x = 0; x < children.getLength(); x++)
{
    Node node = children.item(x);
    builder.append(lsSerializer.writeToString(node));
    builder.append("\n");
}
System.out.println(builder.toString());

有什么幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM