2011-05-26 57 views
0

我有一个问题,假设我有一个XML字符串,如下面的一个:显示标签名称和值/ UNIX

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

如果我想输出是:

请求:SayHello的 响应:波

我将如何进行?我不是在寻找任何特定的东西,我只是想“格式化”XML。

在此先感谢

回答

0

一个Perl的正则表达式和方式:

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()); 
    } 
} 
+0

您好凯文,好耶那的工作,但我我们希望获取xml中的每个标签名称,并将其与其值一起显示,而不管名称本身如何。就像使用以下方式格式化xml:Request:打个招呼,不管标签名称如何,就像一个将每个标签放在一起的通用功能 – GRIM 2011-05-26 14:14:08

+0

@GRIM:查看我的更新示例。请注意,它不适用于嵌套标签。不知道这是你感兴趣的东西。 – Kevin 2011-05-26 15:41:58

+0

非常感谢凯文! – GRIM 2011-05-27 07:06:15

相关问题