jjzjj

C# XmlElement : SelectSingleNode returns null for empty string?

coder 2024-06-24 原文

我是 C# 新手,刚开始使用 XmlElement 及其 SelectSingleNode 方法。在我的 XML 文件中,有一个标签可能有值(即 <tag>value</tag> )或为空(即 <tag></tag> )。如果它为空,则 SelectSingleNode 返回 null。

我目前正在使用以下代码来捕获标签的值:

XmlElement elem = ....
string s = elem.SelectSingleNode("somepath").Value;

这段代码显然会引发空标签的异常。但是,对我来说,空标签是一个有效值,我希望我的字符串的值为“”。

用 try...catch 包装对 SelectSingleNode 的每次调用似乎是一种代码的巨大浪费(我有很多字段可能是空的),我相信有更好的方法来实现这一点。

推荐的方法是什么?

编辑:

根据请求,示例 XML 代码将是:

<Elements>
    <Element>
        <Name>Value</Name>
        <Type>Value</Type> <-- may be empty
        <Color>Value</Color>
    </Element>
    <Element>
        <Name>Value</Name>
        <Type>Value</Type>
        <Color>Value</Color>
    </Element>
</Elements>

CS代码:

XmlDocument doc = new XmlDocument();
doc.Load("name.xml");

foreach (XmlElement elem in doc.SelectNodes("Elements/Element"))
{
    myvalue = elem.SelectSingleNode("Type/text()").Value;
}

最佳答案

您的示例代码:

  myvalue = elem.SelectSingleNode("Type/text()").Value;

就是问题所在。您在那里使用的 XPath 表达式并不意味着“给我元素 Type 的文本”。它的意思是“给我元素类型的所有子文本节点”。并且空元素没有任何子文本节点(XPath 文档模型中的文本节点不能为空)。如果你想获取节点的文本值,你应该使用:

  myvalue = elem.SelectSingleNode("Type").InnerText;

关于C# XmlElement : SelectSingleNode returns null for empty string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173177/

有关C# XmlElement : SelectSingleNode returns null for empty string?的更多相关文章

  1. .net - JavaScriptSerializer 的 XmlAttribute/XmlElement 等价物 - 2

    是否有一个等效的属性可以放置在.NET类中的对象属性上,以执行与XmlElement或XmlAttribute等效的操作?[XmlRoot("objects")]publicclassMyObjects:List{}[XmlRoot("object")]publicclassMyObject{[XmlAttribute("name")]publicstringName{get;set;}[XmlAttribute("title")]publicstringTitle{get;set;}}这将返回类似于以下内容的XML:我想要JavaScriptSerializer,由Controlle

  2. xml - 在复杂的 PL/SQL 中使用 Oracle XMLElement - 2

    使用Oracle10gR2,我需要从存储在标准关系表中的数据生成类似于以下伪示例的内容。p11005055问题是,我需要使用包含数据的行进行决策。我的数据库(我继承的)设计不佳,决定包含行所需的逻辑很复杂。不幸的是,重新设计数据库不是一种选择。我在这里大大简化了逻辑,因此不能使用简单的连接或where子句。数据和数据格式定义具有复杂的层次结构。在伪代码中,过于简化的决定看起来像这样:BEGIN--selectourbasicattributesselectXMLEMENT("product",XMLELEMENT("productName",name),XMLELEMENT("prod

  3. asp.net - 想在类上使用 XmlElement 属性? - 2

    我有以下类(class):[XmlElement("email-address")]publicclassEmailAddress{publicstringaddress{get;set;}publicstringlocation{get;set;}}XmlElement属性在这里有效,但我确实想要这种行为-这可能吗?要将此类的名称在XML中序列化为email-address而不是EmailAddress? 最佳答案 我认为您正在寻找XmlTypeAttribute如果您想更改类的序列化方式。

  4. java - JAXB 一步将集合编码为 XmlElement 和 XmlAttribute - 2

    我想将集合编码为嵌套属性。现在我有:@XmlElement(name="entry")publicCollectiongetSizes(){...}返回:12但我想得到:如果没有新类,这可能吗? 最佳答案 如果没有新类(class),似乎是不可能的。使用XmlAdapter:classEntryAdapterextendsXmlAdapter{publicEntryAdapter.Entrymarshal(Integerid){returnnewEntry(id);}publicIntegerunmarshal(Entrye){re

  5. xml - 如何在 Powershell 中迭代 Xml.XmlElement 的不规则命名的子项? - 2

    我有一个以下格式的XML文件:...如果我在Powershell中获取该数据,我可以使用Get-Memeber查看数据的所有子元素:>$xmlData=[xml](Get-Contentmyfile.xml)>$xmlData.data|Get-Member...fooPropertySystem.Xml.XmlElement...barPropertySystem.Xml.XmlElement...tribblePropertySystem.Xml.XmlElement......而且我可以单独访问每个子元素。但是我如何遍历所有子项,用管道处理它们呢?我很想能够写出这样的东西:>$x

  6. c# - 将 & 添加到 XmlElement - 2

    我正在创建几个用于更大XML文档的XmlElement。XmlElementthisElement=xmlSearchParameters.CreateElement("value");thisElement.InnerXml=this.searchParameters[key];这适用于大多数情况,但如果searchParameters[key]的值恰好包含&符号,我会得到以下两个错误之一:发生了意外的文件结束。第1行,位置1。-如果值为ONLY&解析EntityName时出错。第1行,位置7。-如果值包含&与其他文本混合。在XmlElement中包含&和任何其他特殊符号的首选方法是

  7. xml - 当 WCF 方法返回 XmlElement 时,客户端看到 XElement 返回了吗? - 2

    我从WCf方法返回一个xmlElement。当我在客户端执行服务引用时,相同的方法返回XElement而不是XmlElement。我尝试了所有方法:更新服务引用、制作新的服务引用,但没有帮助。这是我的客户:ServiceReference1.BasicServiceClientbasicWCfClient=newServiceReference1.BasicServiceClient();XmlElementxmlelement=basicWCfClient.GetData(5);basicWCfClient.Close();我得到一个错误:“无法将类型‘System.Xml.Linq

  8. c# - 使用 XMLElement 的 XML 序列化 - 2

    我有一个具有以下数据的已定义类publicpartialclassEHRNodesTesting{privatestringfieldID;privateboolfieldRights;privatestringfieldName;[System.Xml.Serialization.XmlAttribute]publicstringFieldID{get{returnthis.fieldID;}set{this.fieldID=value;}}[System.Xml.Serialization.XmlAttribute]publicboolFieldRights{get{returnt

  9. xml - Postgres xmlelement 编码 - 2

    我的UTF-8格式的postgres数据库和UTF-8格式的客户端。当我尝试:selectxmlelement(namepampam,xmlattributes('русский'as"top"));我回来了:`但我想按原样(即俄语UTF-8)取回属性,而不是р....我该怎么做?这不是解决问题的方法,我使用xmleliment从查询返回的数据中构建xml。而且我找不到另一种方法来做到这一点... 最佳答案 这似乎是不可能的。要打印的值被传递给libxml,这就是它选择打印它的方式。

  10. json - Jaxb 是否需要 @XmlElement - 2

    我的问题是,在进行JSON响应时,是否有必要在pojo中的每个元素之前添加@XmlElement以供jaxb获取。我正在使用jersey-json1.17。我问这个的原因是因为,theexamplegivenonJerseysite不使用注解。我得到一个作为{}的输出,但是当我在属性前添加@XmlElement时,我得到了预期的JSON输出。我是不是做错了什么,导致我的JSON字符串为空?我的代码:顶点列表在构造函数中填充。这会产生{}的错误输出@XmlRootElementpublicclassSquareModel{Listvertices=newArrayList();....}

随机推荐