Возможно ли это с помощью XSLT? - PullRequest
1 голос
/ 19 июня 2009

У меня есть 2 XML-файла. Я хотел бы с программой XSL который исключает (и создает новый xml) все узлы SearchApp_MA_Request из SearchApp_LA_Request, когда Field4 и field5 и field6 совпадают в обоих файлах.

SearchApp_LA_Request.xml

<Request>
    <Rows>
        <Row1>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row1>
        <Row2>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row2>
        <Row3>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row3>
        <Row4>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row4>
    </Rows>
</Request>

SearchApp_MA_Request.xml

<Request>
    <Rows>
        <Row1>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row1>
        <Row2>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row2>
        <Row3>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row3>
        <Row4>
            <Field1>Item1</Field1>
            <Field2>Item2</Field2>
            <Field3>Item3</Field3>
            <Field4>Item4</Field4>
            <Field5>Item5</Field5>
            <Field6>Item6</Field6>
        </Row4>
    </Rows>
</Request>

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

Да,

Я погуглил ваш вопрос (используя ключевые слова merge xml xslt) и нашел этот ресурс, который, похоже, попал в точку вашего вопроса: «Объединить два файла» http://www.dpawson.co.uk/xsl/sect2/merge.html#d7584e19

[по ссылке выше]

Michael Kay

> I have two documents, file A and file B.  I want to join them 
> on the id of
> the first, but only if a matching id is in the 2nd.  How do I do this?
> 
> File A              File B               Desired Output
> <id> A </id>        <id> A </id>         <id> A </id>
> <id> B </id>        <id> C </id>         <id> D </id>
> <id> D </id>        <id> D </id>
> 

<xsl:copy-of select="document('a.xml')//id[.=document('b.xml')//id]"/>

Решения используют функцию xslt document (), которая может обращаться к узлам в документе xml. Более подробную информацию об этом вы можете найти в w3school: http://www.w3schools.com/Xsl/func_document.asp

0 голосов
/ 19 июня 2009

В соответствии с тем, что я понимаю, вам нужно объединить 2 XML-файла, используя XSLT.

Посмотрите на функцию document () в XSLT.

Приветствия

0 голосов
/ 19 июня 2009

Я не знаю, сделают ли какие-нибудь готовые парсеры XSLT то, что вы предлагаете ...

Возможно, вы захотите прочитать один из документов в DOM-дереве, а затем прочитать в другом, добавив в него каждый дочерний элемент.

Затем вы можете либо манипулировать DOM непосредственно в памяти, либо записать его в один документ, а затем выполнить преобразование XSL, чтобы получить уникальные значения ...

Вот так я бы подошел, по крайней мере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...