c# - c# - 查找没有根元素的节点值
问题描述
这是我在 sql 中的列值:
<ProductId>101</ProductId>
<ProductName>TShirt</ProductName>
<Description>UCB</Description>
<Category>199</Category>
<Weight>150</Weight>
<Price>2500</Price>
<images></images>
有时它也看起来像这样:
<ProductId xsi:nil="true" ></ProductId>
<ProductName>Toys</ProductName>
<Description xsi:nil="true" ></Description>
<Category xsi:nil="true" ></Category>
<Weight xsi:nil="true" ></Weight>
<Price xsi:nil="true" ></Price>
<images></images>
我想从该列中提取“ProductName”值,即 TShirt。它可以是任何节点,我该怎么做?
这是我的 C# 代码
var xml = XElement.Parse(xmlString);
string fieldValue = xml.Element(fieldToSearch).ToString();
但由于它不是正确的 xml 字符串,它会给出错误,所以我明确地写了
string xmlString = "<root>" + columnValue + "</root>";
找到节点值的正确方法是什么?
编辑:可以为重量/描述/价格,任何节点提取值。找到 xsi:nil 时出现错误。
解决方案
您收到错误消息,因为该xsi:nil
属性的命名空间前缀为xsi
. 由于您缺少父元素,因此没有声明此前缀。
理想情况下,您应该修复它的来源,以便存储格式良好的 XML 而不是一堆子元素,但是如果您坚持使用它,那么解决问题的最简单方法是将命名空间声明添加到您的虚拟root
元素:
var xmlString =
"<root xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
columnValue +
"</root>";
其次,我会注意到这ToString()
将返回元素本身,例如<ProductName>Toys</ProductName>
. 如果你只想要这个值,那么你可以使用显式转换:
var fieldValue = (string) xml.Element(fieldToSearch);
请参阅此小提琴以获取工作演示。
推荐阅读
- node.js - 如何解决 Node 应用程序中的套接字挂起问题
- javascript - 按下按钮时如何使按钮出现在 HTML 中?你如何制作一个在 HTML 中添加文本的按钮?
- javascript - 在警报框中单击“确定”后,计数计时器以重新启动计时器
- python - 当我使用 Scrapy 时,如何在 POST 请求的正文中发送重复的某些行?
- dax - 我计算移动平均线的 DAX 代码出错
- android - 警察扫描无线电应用程序如何工作?具体来说,他们从哪里获取流式音频数据?
- laravel - 打字时如何忽略laravel livewire组件上的重新渲染
- sql-server - 如何将一列中的 3 列和 10 行合并为 json 数据
- reactjs - React hooks useContext : Uncaught (in promise) TypeError: setUser is not a function
- typescript - 错误 TS2451:无法重新声明块范围变量“cucumber_1”