在java / unix中的xml文件中显示标记名称和值

时间:2011-05-26 13:56:03

标签: xml

我有一个问题,假设我有一个xml字符串,例如下面的字符串:

<请求> SayHello的< /请求><响应>波< /响应>

如果我想输出:

请求:SayHello 回应:波浪

我该怎么办?我不是在寻找任何具体的东西我只想“格式化”xml。

提前致谢

1 个答案:

答案 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());
    }
}