我正在用java编程(最终在Android中编程),我有一个像这样的设置
<A>
<B>
<C>stuff</C>
<D>
<E>other stuff</E>
<F>more stuff</F>
</D>
</B>
<B>
<C>stuff</C>
</B>
<B>
<C>some stuff</C>
<D>
<E>basic stuff</E>
<F>even more stuff</F>
</D>
</B>
</A>
我想解析它,以便我们得到(在我已经编码的其他事物中)所有D都中的东西,所以我们得到的字符串看起来像
<E>other stuff</E>
<F>more stuff</F>
空字符串(“”)和
<E>basic stuff</E>
<F>even more stuff</F>
我一直在使用的解析器一旦达到小于符号'&lt;'就会停止,所以它一直没有给我任何东西。有没有办法像我在Java中描述的那样解析它?
编辑:我刚刚将它转换为字符串并使用正则表达式。
答案 0 :(得分:0)
要将已解析的XML转换回字符串,您可以使用javax.xml.transform.Transformer
。我附加了解析您的示例XML并将所有D
元素打印到控制台的代码 - 我认为您可以将其转换为您想要的内容:)
// The below is simply to create a document to test the code with
String xml = "<A><B><C>stuff</C><D><E>other stuff</E><F>more stuff</F></D></B><B><C>stuff</C></B><B><C>some stuff</C><D><E>basic stuff</E><F>even more stuff</F></D></B></A>";
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource docSource = new InputSource(new StringReader(xml));
Document document = documentBuilder.parse(docSource);
// The above is simply to create a document to test the code with
// Transformer takes a DOMSource pointed at a Node and outputs it as text
Transformer transformer = TransformerFactory.newInstance().newTransformer();
// Add new lines for every element
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// Skip the <? xml ... ?> prolog
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
NodeList elements = document.getElementsByTagName("D");
StringWriter sw = new StringWriter();
StreamResult res = new StreamResult(sw);
DOMSource source = new DOMSource();
for (int i = 0; i < elements.getLength(); i++) {
Element element = (Element) elements.item(i);
source.setNode(element);
// Write the current element to the stringwriter via the streamresult
transformer.transform(source, res);
}
System.out.println(sw.toString());
如果您只想要元素的内容,可以像这样替换for循环:
for (int i = 0; i < elements.getLength(); i++) {
Element element = (Element) elements.item(i);
NodeList childNodes = element.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node childNode = childNodes.item(j);
source.setNode(childNode);
transformer.transform(source, res);
}
}
答案 1 :(得分:0)
您需要使用已编写的解析器。
不要使用自己卷起的,你只是要求自己解决问题。