2015-11-10 81 views
0

是否可以使用substring-before和substring-after作爲選擇器?如果不是,你會怎麼做?substring-after和substring-before使用元素而不是字符串

如果我有這樣的片段,例如,

<root> 
    <element>This is an example. Some text here | and some text there</element> 
</root> 

我可以用串 - 前或子,後與管道|獲得左側或右側的文本

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
exclude-result-prefixes="xs" 
version="2.0"> 

<xsl:template match="root">   
    <element><xsl:value-of select="substring-before(element, '|')"/></element> 
</xsl:template> 
</xsl:stylesheet> 

得到

<?xml version="1.0" encoding="UTF-8"?> 
<element1>This is an example. Some text here </element1> 

但我怎麼能做到這一點與將文本,如LB或ALT的元素?

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <element>This is an example. Some text here <alt type="divider"/> and some text there</element> 
</root> 

我在想兄弟姐妹的事情,但我不想返回一個元素,但字符串。所以我無法真正包圍它。

預先感謝您!

+0

你不能在選擇器軸上使用'text()'嗎? –

+0

「*我怎麼能用一個元素分割文本*」一個元素永遠不會分割文本「。你展示的是三個獨立的兄弟節點:一個文本節點,一個元素節點和另一個文本節點。 –

+0

你已經以錯誤的方式經典地表述了這個問題:你不是問「我怎麼能達到X」,而是問「我可以用雙頭錘子嗎?」;這讓我們去研究這個帖子,以發現你想要的結果,並告訴你,雙頭錘子不是要走的路。事實上,你說這個問題的方式表明你正在將XML文檔看作是帶有交織標記的內容串,而不是節點樹。你需要改變這種想法! –

回答

0

路徑/root/element/text()[1]會給你的文本節點alt元素之前,路徑/root/element/text()[2]文本節點alt元素之後,這是假定你知道有這樣的元素,你必須通過一個元素分開的兩個文本節點。 value-of總是輸出一個節點的字符串值,你永遠不會輸出一個節點本身value-of

0

是的,這個XPath表達式

/root/element/text()[not(preceding-sibling::alt)] 

alt之前選擇文本

and some text there 

和他的XPath表達式,

/root/element/text()[not(following-sibling::alt)] 

後選擇文本 the alt

and some text there 
相關問題