我有一个问题,假设我有一个xml字符串,例如下面的字符串:
<请求> SayHello的< /请求><响应>波< /响应>
如果我想输出:
请求:SayHello 回应:波浪
我该怎么办?我不是在寻找任何具体的东西我只想“格式化”xml。
提前致谢
答案 0 :(得分:0)
使用perl和regex的一种方法:
echo "<Request>SayHello</Request><Response>Wave</Response>" | perl -ne 'print "Request: $1 Response: $2\n" if /<Request>(.*?)<\/Request><Response>(.*?)<\/Response>/'
编辑:
确定并且更通用地捕获并打印任何标记(放入文件x.pl):
#!/usr/bin/perl -w
while (<STDIN>) {
while ($_ =~ /<(.*?)>(.*?)<\/\1>/g) {
print ($1 . ": " . $2 . "\n");
}
}
用法示例如下:
echo "<Request>Hello</Request><Response>Goodbye</Response><Other>Foo</Other>"|./x.pl
EDIT2:
然后这是另一种使用java的方法,你可以根据xpath表达式提取你想要的东西:
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class Example {
Example(String xml) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(xml);
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpresion expr = xpath.compile("/some/xml/path/text()");
NodeList nl = (NodeList) xpath.evaluate(doc, XPathConstants.NODE_LIST);
System.out.println("Node value: " + nl.items(0).getNodeValue());
}
}