2012-12-19 15 views
5

xml要素を文字列として返すにはjava xpathを使用する必要があります。値がされる必要があるが返さ要素全体を文字列として返すJava xpath

<svg> 
    <g id="Background"> 
    </g> 
    <g id="Outline"> 
     <polygon fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"  stroke-miterlimit="10" points=" 119.813,57.875 119.188,57.87" /> 
    </g> 
    <g id="Base_Colour" transform="matrix(0.25 0 0 0.25 0 0)"> 
     <path fill="#ADB1AF" d="M112.25,208l-8,20.25l-0.5-1.75l0.75-0.5v-1.5l0.75-0.5v-1.5L106,222v-1.5l0.75-0.5v-1.5l0.75-0.5v-1.5"/> 
     <path fill="#625595" d="M112.25,208l5.25-14.5l30-30.25l2.25-1.5l41.5-20.5l49.75-9.5h4.25l49,3l48.75"/> 
    </g> 
</svg> 

与え

... ...

<g id="Outline"> 
    <polygon fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round"  stroke-miterlimit="10" points=" 119.813,57.875 119.188,57.87" /> 
</g> 

私は広範囲にGoogleで検索していると私は試してみました何も全体の要素を返すことができませんでした。どのレベルでもgタグをidで照会したいのでXpathが必要です。

+0

:に

public static String getOuterXml(Node node) throws TransformerConfigurationException, TransformerException { Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty("omit-xml-declaration", "yes"); StringWriter writer = new StringWriter(); transformer.transform(new DOMSource(node), new StreamResult(writer)); return writer.toString(); } 

クレジットを? http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+3

Tees - regexesでxmlを処理することは、悪魔の仕事です。 – jeremyjjbrown

答えて

8

私が見つけた解決策は、XPathとorg.w3c.dom.Nodeのを取得することでした(DOMうまくいくだろう)。次に、ノードからjavax.xml.transform.dom.DOMSourceを作成し、それをjavax.xml.transform.TransformerFactoryを使用して文字列に変換しました。

Node node = // the node you want to serialize 
xmlOutput = new StreamResult(new StringWriter()); 
transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
transformer.transform(new DOMSource(node), xmlOutput); 
String nodeAsAString = xmlOutput.getWriter().toString(); 

これは、再利用のためにクラスに簡単に組み込むことができます。残念ながら、.NETにはJavaの.OuterXmlプロパティはありません。すべてのあなた.NETerの今smirkことができます。

2

いいえxpathはXML構文を含む文字列を返しません。

+0

私が遭遇したことに基づく数字。上記の要件を満たす別のソリューションのアイデアはありますか? – jeremyjjbrown

+2

xpathを使用して重要な要素を見つけ、通常のJava APIを使用してXMLをシリアル化して文字列にシリアル化します。 – bmargulies

+2

「No xpath ever」? '/ */g [@ id = 'Outline']/outer-xml(。)と書くことができます* – BeniBela

0

私は、Javaについては知らないが、.NETの世界で1が使用します。

doc.DocumentElement.SelectSingleNode("/*/g[@id='Outline']").OuterXml 
+1

質問は明らかに「java」と言っていますが、なぜここでも.Netを言及しています – lidermin

+0

@lidermin、はい、そして質問明らかに "XPath"と言いました。 "java"以外の質問には、 "xml"と "xpath"というタグが付いています。この答えは質問のXPath/XML側のものです。タグで示される3つの領域のうちの2つをカバーしています。そして著者は明示的に言う: "Xpathは望ましい"。 Javaを知っているかもしれませんが、XPathの知識がなければ、実質的に不完全です。あなたがこれを理解している場合には、あなたのdownvoteを逆転させることに感謝します。 –

+0

@Dimitre_Novatchev、Ok、ただし、私が提供した解決策は私のものではなく、私はそこにクレジットを掲示し、それは他のJavaの世界でも同様の状況の人物 – lidermin

0

私はこのコードで私の問題解決:おそらく、正規表現を使用しchick.Net

+0

ありがとう、それは私のために働く:) – Mankeomorakort

関連する問題