同じ階層レベルで繰り返される関連項目を適切にネストされた要素に変換するにはどうすればよいでしょうか?
フォーム エンジンからの複雑な SQL クエリからの出力として、このような XML があり、CV のような情報を収集し、いくつかのフィールド (以前の仕事など) を繰り返すことができます。ただし、それらは友好的な方法で出力されません。
<People>
<Person>
<Field1>Fred</Field1>
<Field2>Head Chef</Field2>
<Field3>The Ritz Hotel</Field3>
<Field2>Bottle Washer</Field2>
<Field3>Dog and Duck</Field3>
</Person>
<Person>
<Field1>Mary</Field1>
<Field2>Chief Executive</Field2>
<Field3>BigCorp</Field3>
<Field2>Manager</Field2>
<Field3>LargeCorp</Field3>
<Field2>Mail Clerk</Field2>
<Field3>SmallCorp</Field3>
</Person>
</People>
私がする必要があるのは、これを他の XML に変換して、Field2 と Field3 の繰り返しセットを別の親要素に分離することです。
<People>
<Person>
<Name>Fred</Name>
<Jobs>
<Job>
<JobTitle>Head Chef</JobTitle>
<Employer>Ritz Hotel</Employer>
</Job>
<Job>
<JobTitle>Bottle Washer</JobTitle>
<Employer>Dog and Duck</Employer>
</Job>
</Jobs>
</Person>
<Person>
<Name>Mary</Name>
<Jobs>
<Job>
<JobTitle>Chief Executive</JobTitle>
<Employer>BigCorp</Employer>
</Job>
<Job>
<JobTitle>Manager</JobTitle>
<Employer>LargeCorp</Employer>
</Job>
<Job>
<JobTitle>Mail Clerk</JobTitle>
<Employer>SmallCorp</Employer>
</Job>
</Jobs>
</Person>
</People>
フィールドは常に順序付けられます。つまり、Field1 の次に Field2 があり、オプションで別の Field1 と Field2 があり、オプションでうんざりするほど繰り返されます。単発フィールド (もちろん多数あります) の単純な処理を行うコードがありますが、このようなフィールド (学歴、職歴など) の繰り返しセットがいくつかある可能性があります。整理する。翻訳の名前をどこで取得するか (たとえば、"Field3" から "Employer" へ) について心配する必要はありません。解析に役立つ場合は、入力要素の名前を調整できます。たとえば、シーケンスの序数を追加して、関連する要素をグループ化します。たとえば、次のようになります。
...
<Field2_Seq1>Head Chef</Field2_Seq1>
<Field3_Seq1>The Ritz Hotel</Field3_Seq1>
<Field2_Seq2>Bottle Washer</Field2_Seq2>
<Field3_Seq2>Dog and Duck</Field3_Seq2>
....
私はこれに非常に苦労しています - 私は XSL に不慣れで、それを機能させるように圧力をかけられています (いつ機能しないのですか?)。
ありがとう、キース。
編集: 実際には、繰り返しセット (Field4、Field5... FieldN など) にはさらに多くのフィールドがあり、それらはオプションであるため、シーケンス内の項目を省略した可能性があります: 存在する項目は昇順ですが、必ずしも連続した順序ではありません. 新しい Job 要素のトリガーは、数値が逆になったことです (たとえば、Field6 から Field3 へ)。したがって、対処する必要があります。
...
<Field1>John</Field1>
<Field4>Something</Field4>
<Field6>Missed some more</Field6>
<Field2>New Job</Field2>
...
(部分) のようなものを生成する
...
<Person>
<Name>John</Name>
<Job>
<SomeElement>Something</SomeElement>
<YetAnother>Missed some more</YetAnother>
</Job>
<Job>
<JobTitle>New Job</JobTitle>
...
不適切な元の質問の例をお詫びします。