2011-05-26 120 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

相關問題