XSLT переместить элемент и добавить ссылку ID - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий XML:

<Metro>
<MeasurementList>
    <Measurement>
        <MeasurementX>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1212</AcqSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1213</AcqSettingsRef>
        </MeasurementY>
    </Measurement>
    <Measurement>
        <MeasurementX>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1212</AcqSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1214</AcqSettingsRef>
        </MeasurementY>
    </Measurement>
    <Measurement>
        <MeasurementX>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1215</AcqSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla</Prop1>
            <AcqSettingsRef>#1216</AcqSettingsRef>
        </MeasurementY>
    </Measurement>
</MeasurementList>
<References>
    <AcqSettings>
        <Id>1212</Id>
        <Prop2>bla</Prop2>
        <Prop3>bla33</Prop3>
    </AcqSettings>
    <AcqSettings>
        <Id>1213</Id>
        <Prop2>bla</Prop2>
        <Prop3>bla34</Prop3>
    </AcqSettings>
    <AcqSettings>
        <Id>1214</Id>
        <Prop2>bla</Prop2>
        <Prop3>bla35</Prop3>
    </AcqSettings>
    <AcqSettings>
        <Id>1215</Id>
        <Prop2>bla</Prop2>
        <Prop3>bla36</Prop3>
    </AcqSettings>
    <AcqSettings>
        <Id>1216</Id>
        <Prop2>bla</Prop2>
    </AcqSettings>
</References>
</Metro>

Мне нужно переместить тег <Prop3> из <AcqSettings> в собственный тег элемента и добавить ID. Это ID также необходимо добавить в другой элемент, чтобы они были связаны. Кроме того, <Prop3> может отсутствовать и один <AcqSettings> может иметь несколько ссылок.

Ожидаемый файл должен быть таким.

<Metro>
<MeasurementList>
    <Measurement>
        <MeasurementX>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1212</AcqSettingsRef>
            <SensSettingsRef>#33</SensSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1213</AcqSettingsRef>
            <SensSettingsRef>#34</SensSettingsRef>
        </MeasurementY>
    </Measurement>
    <Measurement>
        <MeasurementX>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1212</AcqSettingsRef>
            <SensSettingsRef>#33</SensSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1214</AcqSettingsRef>
            <SensSettingsRef>#35</SensSettingsRef>
        </MeasurementY>
    </Measurement>
    <Measurement>
        <MeasurementX>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1215</AcqSettingsRef>
            <SensSettingsRef>#36</SensSettingsRef>
        </MeasurementX>
        <MeasurementY>
            <Prop1>bla<Prop1>
            <AcqSettingsRef>#1216</AcqSettingsRef>
        </MeasurementY>
    </Measurement>
</MeasurementList>
<References>
    <AcqSettings>
        <Id>1212</Id>
        <Prop2>bla<Prop2>
    </AcqSettings>
    <AcqSettings>
        <Id>1213</Id>
        <Prop2>bla<Prop2>
    </AcqSettings>
    <AcqSettings>
        <Id>1214</Id>
        <Prop2>bla<Prop2>
    </AcqSettings>
    <AcqSettings>
        <Id>1215</Id>
        <Prop2>bla<Prop2>
    </AcqSettings>
    <AcqSettings>
        <Id>1216</Id>
        <Prop2>bla<Prop2>
    </AcqSettings>
    <SensSettings>
        <Id>33</Id>
        <Prop3>bla33<Prop3>
    </SensSettings>
    <SensSettings>
        <Id>34</Id>
        <Prop3>bla34<Prop3>
    </SensSettings>
    <SensSettings>
        <Id>35</Id>
        <Prop3>bla35<Prop3>
    </SensSettings>
    <SensSettings>
        <Id>36</Id>
        <Prop3>bla36<Prop3>
    </SensSettings>
</References>
</Metro>

Я могу сгенерировать ID, используя 'generate-id', но я не уверен, как добавить это к новому элементу и к элементам <MeasurementX/Y> для ссылки. Это также должно быть сделано в XSLT версии 1.

...