簡體   English   中英

無法獲取 XML 中的元素

[英]Unable to get element in XML

<?xml version="1.0" encoding="utf-8"?>
<serv:message
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:serv="http://www.webex.com/schemas/2002/06/service" xsi:schemaLocation="http://www.webex.com/schemas/2002/06/service http://www.webex.com/schemas/2002/06/service.xsd">
    <header>
        <securityContext>
            <webExID/>
            <password/>
            <siteID/>
            <partnerID/>
        </securityContext>
    </header>
    <body>
        <bodyContent xsi:type="java:com.webex.service.binding.training.CreateTrainingSession"
            xmlns="http://www.webex.com/schemas/2002/06/service/training"
            xmlns:com="http://www.webex.com/schemas/2002/06/common"
            xmlns:sess="http://www.webex.com/schemas/2002/06/session"
            xmlns:serv="http://www.webex.com/schemas/2002/06/service"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.webex.com/schemas/2002/06/service/training http://www.webex.com/schemas/2002/06/service/training/trainingsession.xsd">
            <sess:accessControl>
                <sess:sessionPassword/>
            </sess:accessControl>
            <sess:schedule></sess:schedule>
            <metaData>
                <sess:confName/>
                <agenda/>
                <description/>
                <greeting/>
                <location/>
            </metaData>
            <enableOptions>
                <chat/>
                <poll/>
                <audioVideo/>
                <fileShare/>
                <applicationShare/>
                <desktopShare/>
                <annotation/>
                <fullScreen/>
                <voip/>
            </enableOptions>
        </bodyContent>
    </body>
</serv:message>

上面的 XML 是標准的 VILT 創建事件 xml,我需要用適當的數據填充它。

問題是我能夠使用下面的代碼獲取“securityContent”元素,並且節點包含 4 個子元素的總數:

var node = xmlDoc.SelectNodes("/serv:message/header/securityContext/*", GetNameSpace(xmlDoc.NameTable));

但是當我嘗試獲取另一個節點即“metaData”時,我得到 Count 0 並且獲取元素的方式完全相同,除了元素的路徑。

以下是我嘗試過但無法正常工作的示例代碼:

static void Main(string[] args)
{
    var xmlPathh = @"C:\Users\SKMEENA\Desktop\VILT.xml";// this holds above xml
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(xmlPathh);

    var node = xmlDoc.SelectNodes("/serv:message/header/securityContext/*", GetNameSpace(xmlDoc.NameTable));

    var member = xmlDoc.SelectNodes("/serv:message/body/bodyContent/metaData/*", GetNameSpace(xmlDoc.NameTable));
}

static XmlNamespaceManager GetNameSpace(XmlNameTable objNameTable)
{
    XmlNamespaceManager objNsManager =new XmlNamespaceManager(objNameTable);
    objNsManager.AddNamespace("serv", "http://www.webex.com/schemas/2002/06/service");
    objNsManager.AddNamespace("ns1", "http://www.webex.com/schemas/2002/06/service/site");
    return objNsManager;
}

任何人都知道上面的代碼有什么問題,我怎樣才能讓它工作?

bodyContent節點有一個默認命名空間,適用於它及其所有子節點。

您需要將其添加到NamespaceManager中,然后在 XPath 中使用它

var member = xmlDoc.SelectSingleNode("/serv:message/body/body:bodyContent/body:metaData", GetNameSpace(xmlDoc.NameTable));
member.OuterXml.Dump();
static XmlNamespaceManager GetNameSpace(XmlNameTable objNameTable)
{
    XmlNamespaceManager objNsManager =new XmlNamespaceManager(objNameTable);
    objNsManager.AddNamespace("serv", "http://www.webex.com/schemas/2002/06/service");
    objNsManager.AddNamespace("ns1", "http://www.webex.com/schemas/2002/06/service/site");
    objNsManager.AddNamespace("body", "http://www.webex.com/schemas/2002/06/service/training");
    objNsManager.AddNamespace("sess","http://www.webex.com/schemas/2002/06/session");
    return objNsManager;
}

dotnetfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM