2009-09-02 6 views
7

У меня есть некоторые обработки-инструкция элементы внутри моего содержания XML, например:Как сопоставить элемент обработки-инструкции в XSLT?

<?legalnoticestart?> 
<?sourcenotestart?> 
<para>Content para</para> 
<?sourcenoteend?> 
<?literallayoutstart?> 
<para>body content </para> 
<?literallayoutend?> 
<?legalnoticeend?> 

Как я сопрягать эти элементы и получить содержимое в формате ниже требуемого элемент?

Обязательный XML:

<legalnotice> 
<sourcenote> 
<p>Content para</p> 
</sourcenote> 
<literallayout> 
<p>body content</p> 
</literallayout> 
</legalnotice> 

Пожалуйста совет ....

С наилучшими пожеланиями, Antony

ответ

17

По умолчанию процессор XSLT будет игнорировать ИП - сопоставить их с тем, чтобы сделать весело и полезно, вы можете использовать инструкция по обработке совпадение в шаблоне:

<xsl:template match="processing-instruction('legalnoticestart')"> 
    <legalnotice><xsl:value-of select="."/></legalnotice> 
</xsl:template> 

Например, следующая таблица стилей:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="doc"> 
     <xsl:apply-templates select="processing-instruction('legalnoticestart')" /> 
    </xsl:template> 

    <xsl:template match="processing-instruction('legalnoticestart')"> 
     <legalnotice><xsl:value-of select="."/></legalnotice> 
    </xsl:template> 
</xsl:stylesheet> 

С этим документом:

<doc> 
    <?legalnoticestart?> 
    <?legalnoticeend?> 
</doc> 

Урожайность:

<?xml version="1.0"?> 
<legalnotice> 
</legalnotice> 
+0

Извините, но не работает, я просто получаю контент без какого-либо элемента. – Antony

+0

привет, я не получаю контент, когда использую ваш второй код ... я получаю только этот элемент ... – Antony

+1

Так что это работает! Мой код был всего лишь фрагментом, чтобы продемонстрировать, как вы это сделаете. – butterchicken

2

Это по своей сути плохой дизайн, вы, кажется, пытаются для соответствия меток начала и конца, но без использования доступных методов, если бы вы использовали фактический элемент xml.

Несмотря на то, что вы можете сопоставлять инструкции по началу/концу обработки, это сложно с помощью xpath найти узлы между указанными инструкциями обработки. Если у вас есть гнездование или повторение таких инструкций, это может стать еще более сложным. И в конце концов, все это делает, пытается реплицировать то, что xml уже делает, не используя xml?

Смежные вопросы