區分我有2個節點現有節點和空節點
和<example></example>
。
我該如何區分它們?
在我看來,第一個是<xsl:when test="example">
,第二個是
<xsl:when test="example = ''">
。我不認爲這些是正確的 我對此感到困惑任何人都可以澄清?
在此先感謝
區分我有2個節點現有節點和空節點
和<example></example>
。
我該如何區分它們?
在我看來,第一個是<xsl:when test="example">
,第二個是
<xsl:when test="example = ''">
。我不認爲這些是正確的 我對此感到困惑任何人都可以澄清?
在此先感謝
在我看來 - 空元素的兩種形式都是平等的,這是不可能區分它們。
<xsl:when test="example">
測試是否存在某個名爲「example」的元素。
<xsl:when test="example = ''">
測試元素的字符串值是否爲空字符串。
第二個聲明不是真的,因爲它只測試元素的字符串值是否爲空字符串。它將測試'
你說得對 - 我的錯。我改進了我的答案。謝謝你的評論。 –
XML信息集,並且有和<example></example>
沒有區別的XPath數據模型狀態:
http://www.w3.org/TR/xml-infoset/#omitted(項目D.7)
http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/#ElementNode(在這裏你找不到任何財產區分兩種不同一個空元素的語法:如果元素沒有使用任何語法的子元素,則元素節點的構造方式相同)
我該如何區分它們?
您不能在XML工具中區分它們,因爲它們是兩種不同的方式來序列化完全相同的XML節點樹。如果您的應用需要來區分這兩種情況那麼您需要使用某種非XML工具,無論是專門的還是作爲預處理步驟。
例如,如果您知道在原始文件中沒有字符串「/>
」的實例,而不是作爲空元素標記的一部分,那麼您可以對原始文件進行文本替換(視爲文本)來解析結果作爲XML前更改的
/>
所有實例爲
_wasEmpty="yes"/>
(包括前導空格),然後你的XSLT可以區分使用<xsl:when test="example[_wasEmpty = 'yes']">
。
我(和許多其他人)會認爲,聲稱一個應用程序中的基於XML的,但它需要的東西,XML說是等價的是從根本上打破區分 - 在這裏正確的方法是與任何設計您正在使用的格式的人交談,並要求他們改變它以便以兼容XML的方式區分案例,例如使用xsi:nil
。但我很務實,明白有時這是不可能的;-)
它們無法通過設計來區分。你也可以寫
<example />
或
<example ></example >
和那些也將是不可區分的。
這些變體旨在爲創作或生成XML的人員提供一些靈活性,而不會使使用XML的應用程序複雜化。
注意:test =「example」是一個測試,如果節點存在,它存在於兩種情況下,因此兩者都是正確的。這也適用於第二種情況,因爲兩個示例子節點都包含空字符串。 –