2013-08-01 68 views
1

區分我有2個節點現有節點和空節點

​​和<example></example>

我該如何區分它們?

在我看來,第一個是<xsl:when test="example">,第二個是
<xsl:when test="example = ''">。我不認爲這些是正確的 我對此感到困惑任何人都可以澄清?

在此先感謝

+0

注意:test =「example」是一個測試,如果節點存在,它存在於兩種情況下,因此兩者都是正確的。這也適用於第二種情況,因爲兩個示例子節點都包含空字符串。 –

回答

0

在我看來 - 空元素的兩種形式都是平等的,這是不可能區分它們。

<xsl:when test="example">測試是否存在某個名爲「example」的元素。

<xsl:when test="example = ''">測試元素的字符串值是否爲空字符串。

+0

第二個聲明不是真的,因爲它只測試元素的字符串值是否爲空字符串。它將測試'',但在那種情況下,''元素不是空的。爲了測試''子元素是空的,使用'test =「not(example/node())」'。 –

+0

你說得對 - 我的錯。我改進了我的答案。謝謝你的評論。 –

1

我該如何區分它們?

您不能在XML工具中區分它們,因爲它們是兩種不同的方式來序列化完全相同的XML節點樹。如果您的應用需要來區分這兩種情況那麼您需要使用某種非XML工具,無論是專門的還是作爲預處理步驟。

例如,如果您知道在原始文件中沒有字符串「/>」的實例,而不是作爲空元素標記的一部分,那麼您可以對原始文件進行文本替換(視爲文本)來解析結果作爲XML前更改的

/> 

所有實例爲

_wasEmpty="yes"/> 

(包括前導空格),然後你的XSLT可以區分使用<xsl:when test="example[_wasEmpty = 'yes']">


我(和許多其他人)會認爲,聲稱一個應用程序中的基於XML的,但它需要的東西,XML說是等價的是從根本上打破區分 - 在這裏正確的方法是與任何設計您正在使用的格式的人交談,並要求他們改變它以便以兼容XML的方式區分案例,例如使用xsi:nil。但我很務實,明白有時這是不可能的;-)

1

它們無法通過設計來區分。你也可以寫

<example /> 

<example ></example > 

和那些也將是不可區分的。

這些變體旨在爲創作或生成XML的人員提供一些靈活性,而不會使使用XML的應用程序複雜化。