私はジレンマに陥りました。特定のアプリケーションでは、私は次のようになりSOAPリクエストからXMLの結果を受けています:XML結果のXSLTによる除外
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header />
<env:Body>
<ns1:searchResponse xmlns:ns1='http://url.to.namespace' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<ns1:result><?xml version="1.0"?><results count="201" returned="201" code="200" msg="successful"><result order="0"><dirkey>DK886shn3525</dirkey><eid>smith</eid><email>[email protected]</email><fn>Smith</fn><ln>Bob</ln><wid>859589157</wid><score>70</score></result><result order="1"><dirkey>DK547fjx6702</dirkey><eid>james31</eid><email>[email protected]</email><fn>Tim</fn><ln>Allen</ln><stu><lvl>Senior</lvl><plans><plan>Technology Management-B</plan></plans><contacts><contact type="permanent"><city>Salina</city><phone>(123) 456-7890</phone><postal>67401</postal><street1>1111 Main Ln</street1><state>KS</state></contact></contacts></stu><wid>2222222222</wid><score>20</score></result></ns1:result>
</ns1:searchResponse>
</env:Body>
</env:Envelope>
私は<ns1:result>
要素内に含まれるデータの中で最も興味を持っています。これはHTMLの世界では意味をなさないかもしれませんが、<ns1:result>
というテキストがXMLとして必要です。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://url.to.namespace"
exclude-result-prefixes="env ns1">
<xsl:output omit-xml-declaration="yes" indent="yes" method="text" />
<xsl:strip-space elements="*"/>
<!-- Template #1 - Identity Transform -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Template #2 - for all text() nodes, disable output escaping -->
<xsl:template match="text()">
<xsl:copy-of select="." disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
...技術的にはは私が欲しいものを作るん:XSLを経由してこれを行うことの可能性に興味をそそられ、私は次のスタイルシートを構築しかし
<?xml version="1.0"?>
<results count="201" returned="201" code="200" msg="successful">
<result order="0">
<dirkey>DK886shn3525</dirkey>
<eid>smith</eid>
<email>[email protected]</email>
<fn>Bob</fn>
<ln>Smith</ln>
<wid>859589157</wid>
<score>70</score>
</result>
<result order="1">
<dirkey>DK547fjx6702</dirkey>
<eid>ta</eid>
<email>[email protected]</email>
<fn>Tim</fn>
<ln>Allen</ln>
<stu>
<lvl>Senior</lvl>
<plans>
<plan>Technology Management-B</plan>
</plans>
<contacts>
<contact type="permanent">
<city>Salina</city>
<phone>(123) 456-7890</phone>
<postal>67401</postal>
<street1>1111 Main Ln</street1>
<state>KS</state>
</contact>
</contacts>
</stu>
<wid>2222222222</wid>
<score>20</score>
</result>
</results>
を、私はそれを聞きましたDOEは絶望的な個人の兆候だと語った。実際、私たちのアプリケーション(テンプレートエンジンにXMLを渡す前にXMLを変換するように設計されているアプリケーション)を使ってこのXSLTを実行しようとすると、機能しません。 DOEが私たちの特定のXSLパーサに実装されていないと推測しています...
DOXのようなパーサー固有の手法を使用せずにこれらのエンティティをエスケープするXSLT 1.0の方法はありますか?私の考えでは、特定のエスケープ文字(例えば>
)を文字通りの文字列(>
)に変換する方法を考えていましたが、どうしたらよいか分かりません。
いつものように、私はあなたの助けに感謝します。
P.S.この出力がどれほど嫌なのか、ドキュメント構造をどのように変えてしまったのかを教えてください。私たちはすでにそれを変更しようとしましたが、それは選択肢ではありません。 DOEのようにパーサ固有の戦術を使用せずに、これらのエンティティアンエスケープ にXSLT 1.0での方法があります私の1に考えたのは エスケープ特定の変換方法を構築されています:(
いつものように、@Dimitreに感謝します。 – ABach
@ABach:どうぞよろしくお願いいたします。 –