如何使用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查询?或者我做错了什么,我没有注意到。谢谢你抽出时间。

如何使用C#和XPath访问名称仅由数字组成的Xml节点

这不是一个有效的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。

我希望这能有所帮助。