C# Linq to XML 检查元素是不是存在
Posted
技术标签:
【中文标题】C# Linq to XML 检查元素是不是存在【英文标题】:C# Linq to XML check if element existsC# Linq to XML 检查元素是否存在 【发布时间】:2009-06-24 16:59:08 【问题描述】:我有一个如下的 XML 文档:
<Database>
<SMS>
<Number>"+447528349828"</Number>
<Date>"09/06/24</Date>
<Time>13:35:01"</Time>
<Message>"Stop"</Message>
</SMS>
<SMS>
<Number>"+447528349828"</Number>
<Date>"09/06/24</Date>
<Time>13:35:01"</Time>
<Message>"Stop"</Message>
</SMS>
</Database>
我正在尝试检查文档中是否存在父 SMS 节点的 number 子节点(用于验证目的以避免插入重复数据)。
对潜在解决方案有何建议?
编辑: 该元素将与输入字符串进行比较。例如 if(inputNumber == xmlDocNumber) //不要插入新元素
【问题讨论】:
您能否给我们一些示例(伪?)代码,以提供您需要的上下文和更清晰的图片> 示例代码将如何帮助............找到 xml 文档中的任何指定元素......。除了我所拥有的,我还能给你什么? 【参考方案1】:我会建议与使用 Count()
略有不同的方法 - 使用 Any()
。优点是 Any() 可以在得到任何匹配项后立即停止:
var smsWithNoNumber = main.Descendants("SMS")
.Where(x => !x.Elements("Number").Any());
在这种情况下,它不会产生太大的可能性,但在 Count()
可能不得不计算一百万次点击以告诉您至少有一个点击的情况下,这是一个有用的技巧。我想说这也更清楚地表明了你的意思。
【讨论】:
如何使用它进行检查?抱歉,我还在熟悉 LINQ @Blackator:Any
部分正在进行检查。我不知道你面临什么问题,所以很难更准确。也许你应该问一个新问题?
请检查我的问题here。谢谢乔恩【参考方案2】:
假设您的号码采用某种规范化形式,并且您的 XML 被加载到 XmlDocument
或类似的文件中,最简单的非 LINQ 方法是使用 XPath 查询:
string pattern = String.Format("/Database/SMS/Number[. = '0']", number);
if (myDoc.SelectSingleNode(pattern) != null)
// number already exists in document
【讨论】:
问题是使用 Linq to XML【参考方案3】:您可以应用 XSL 文档,通过遍历 SMS 节点并排除任何具有重复 Number/text() 值的数据来转换数据
检查类似于:
<xsl:template match="SMS">
<xsl:variable name="parentNode" select="." />
<xsl:if test="preceding-sibling::SMS/Number/text()=$parentNode/Number/text()">
.....include a copy of node......
</xsl:if>
</xsl:template>
【讨论】:
问题是使用 Linq to XML#以上是关于C# Linq to XML 检查元素是不是存在的主要内容,如果未能解决你的问题,请参考以下文章