以下の質問には解決策がありますが、XSLTを使用して1つの「テンプレート」XMLともう1つの「引数」XMLからテキストを生成する一般的な方法XML
質問:
我々は<verbatim>
要素及び又は<part id='part001'>
要素にネストしてもしなくてもよいどちらも<argument id='foo'/>
元素の混合物から構成されている「template.xml」を有します。 (したがって、verbatimsと引数はルート要素に含めることも、<part> ... </part>
要素に含めることもできます)。
例 "template.xml":
<template_root>
<verbatim>Title</verbatim>
<part id='part001'>
<verbatim>Nested in part 1.</verbatim>
<argument id='keywords'>ARGKEY1, ARGKEY2, ARGKEY3</argument>
<verbatim>End of part 1.</verbatim>
</part>
<part id='DoNotUse'>
<verbatim>This should not be in the output</verbatim>
</part>
<verbatim>End of article</verbatim>
</template_root>
は、我々は別のファイルを持っている、 "<引数ID = 'someid' />" エレメントから構成されている "のinstance.xml" は、(<引数を参照/> sをtemplate.xmlに入れます)。これは、上記のように同じ "< part id = 'partid'>"要素に入れ子にされている場合と入れ子されていない場合があります。
例 "のinstance.xml":
<instance_root template='template.xml'>
<part id='part001'>
<argument id="keywords" enabled='true'/>
</part>
</instance_root>
私たちは、 "のinstance.xml" から次の情報を読み込み、テンプレートファイル名に
- 読むを生成XSLTをしたい(例: "template.xml")および "template.xml" のすべての要素について、次に
- :
-
全ての
- コピー値をtemplate.xmlの
<template_root>
にあるがそのままです。それはまた、同じ@id
属性@enabled='true'
で「のinstance.xml」の<instance_root>
にリストされている場合にのみ、template.xmlの<template_root>
内のすべての<argument>
の - コピー値。
- "template.xml"にある
<part>
のすべての子どもに対して上記(21)および(22)と同じ処理を行い、同じ@id
の<part>
も「instance.xml」にあり、他のすべてを無視する場合のみ"template.xml"の<part>
- コピー値をtemplate.xmlの
だから私たちはコピーされませんものです。 1「のinstance.xml」で対応する<argument>
を持っていない「template.xml」のすべての<argument>
。 2. "template.xml"の<part>
には、 "instance.xml"に対応する<part>
がありません。
例のテキスト出力:
Title
Nested in part 1.
ARGKEY1, ARGKEY2, ARGKEY3
End of part 1.
End of article
私はxsltprocのを使用していますが、一般的な方法(または、あなたが考えることができる最善の方法は)これを行うには何か知りたいの? 「汎用」とは、複雑なXPathをハードコードしたり、個々の要素を参照したりしたくないということです([1]、[2]などを使用します)。
あなたのルールは完全にはっきりしていません。コピーしない要素は** **正確に説明してください。あなたは「逐語的」をコピーしますが、何らかの条件に合わない「部分」の子はしませんが、「逐語的」も一部の子です。意味が明確でない場合は、 'instance.xml'の内部階層がここで再生されます。なぜ要素をコピーすることになっているのですか? –
これらのコメントを削除し、質問を編集してください。 –
完了。それはもっと明確ですか? – RMZ