[英]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.