如何使用C#和XPath访问名称仅由数字组成的Xml节点
本文关键字:数字 节点 Xml 何使用 XPath 访问 | 更新日期: 2023-09-27 18:19:43
考虑以下由一个工具生成的XML:
<root>
<GameToVideoMap>
<200000001120460>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</200000001120460>
<13131>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</13131>
<2>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</2>
</GameToVideoMap>
</root>
其中GameToVideoMap是字典。我想使用某个函数生成的XPath字符串来访问URL。所以我会有以下命令:
string path = "/root[1]/GameToVideoMap[1]/200000001120460[1]/VideoThumbnailUrl[1]";
XmlNode targetNode = targetDoc.SelectSingleNode(path);
问题是SelectSingleNode引发异常"表达式必须计算为节点集。"。如果我仅将路径用作:
string path = "/root[1]/GameToVideoMap[1]";
然后if运行良好,我可以看到它在VisualStudio的调试模式中有一个名为"200000001120460"的子节点,就像在XML文档中一样。所以我认为我的问题是节点的数字只由数字组成。有没有一种方法可以转义节点的名称,以便能够对该格式的XML使用XPath查询?或者我做错了什么,我没有注意到。谢谢你抽出时间。
这不是一个有效的XML,所以我建议使用正则表达式。您可以通过将数字节点名称转换为属性将文本转换为XML
<root>
<GameToVideoMap>
<elem val='200000001120460'>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</elem>
<elem val='13131'>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</elem>
<elem val='2'>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</elem>
</GameToVideoMap>
或
你也可以在它们后面加一个像这样的字符
<root>
<GameToVideoMap>
<m200000001120460>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</m200000001120460>
<m13131>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</m13131>
<m2>
<VideoThumbnailUrl>URL Text</VideoThumbnailUrl>
<VideoUrl>Text</VideoUrl>
<Title>Text</Title>
</m2>
</GameToVideoMap>
如果您决定将数据转换为有效的XML,那么可以使用XPath。
我希望这能有所帮助。