add namespace using xmlnamespacemanager in C#

后端 未结 2 1292
攒了一身酷
攒了一身酷 2021-01-11 12:40

I am trying to read the data from XML File. In this elements are prefixed with \'app\' and \'gml\' text. because of these prefixes I am unable to read the data. For this I a

相关标签:
2条回答
  • 2021-01-11 13:13

    You could use LINQ-to-XML, like this:

    var document = XDocument.Load("http://www.weather.gov/forecasts/xml/SOAP_server/ndfdXMLclient.php?whichClient=GmlLatLonList&lat=&lon=&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&listLat1=&listLon1=&listLat2=&listLon2=&resolutionList=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&listEndPoint1Lat=&listEndPoint1Lon=&listEndPoint2Lat=&listEndPoint2Lon=&zipCodeList=&listZipCodeList=&centerPointLat=&centerPointLon=&distanceLat=&distanceLon=&resolutionSquare=&listCenterPointLat=&listCenterPointLon=&listDistanceLat=&listDistanceLon=&listResolutionSquare=&citiesLevel=&listCitiesLevel=&sector=&gmlListLatLon=38.99,-77.02%2039.70,-104.80%2047.6,-122.30&featureType=Forecast_Gml2Point&requestedTime=&startTime=2000-01-01T00:00:00&endTime=2012-01-01T00:00:00&compType=Between&propertyName=wx,temp,icons&product=time-series&begin=2004-01-01T00:00:00&end=2015-06-07T00:00:00&maxt=maxt&Submit=Submit");
    var appSampleElements = document.Descendants(XName.Get("Forecast_Gml2Point", "http://www.weather.gov/forecasts/xml/OGC_services")).ToList();
    var gmlSampleElements = document.Descendants(XName.Get("Box", "http://www.opengis.net/gml")).ToList();
    

    Use "http://www.weather.gov/forecasts/xml/OGC_services" namespace for those that prefixed with app. Use "http://www.opengis.net/gml" namespace for those that prefixed with gml.

    With XmlDocument:

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load("http://www.weather.gov/forecasts/xml/SOAP_server/ndfdXMLclient.php?whichClient=GmlLatLonList&lat=&lon=&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&listLat1=&listLon1=&listLat2=&listLon2=&resolutionList=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&listEndPoint1Lat=&listEndPoint1Lon=&listEndPoint2Lat=&listEndPoint2Lon=&zipCodeList=&listZipCodeList=&centerPointLat=&centerPointLon=&distanceLat=&distanceLon=&resolutionSquare=&listCenterPointLat=&listCenterPointLon=&listDistanceLat=&listDistanceLon=&listResolutionSquare=&citiesLevel=&listCitiesLevel=&sector=&gmlListLatLon=38.99,-77.02%2039.70,-104.80%2047.6,-122.30&featureType=Forecast_Gml2Point&requestedTime=&startTime=2000-01-01T00:00:00&endTime=2012-01-01T00:00:00&compType=Between&propertyName=wx,temp,icons&product=time-series&begin=2004-01-01T00:00:00&end=2015-06-07T00:00:00&maxt=maxt&Submit=Submit");
    XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
    namespaceManager.AddNamespace("app", "http://www.weather.gov/forecasts/xml/OGC_services");
    namespaceManager.AddNamespace("gml", "http://www.opengis.net/gml");
    
    var appNodes = xmlDoc.SelectNodes("//app:Forecast_Gml2Point", namespaceManager);
    var gmlNode = xmlDoc.SelectSingleNode("//gml:Box", namespaceManager);
    
    0 讨论(0)
  • 2021-01-11 13:26

    Something like:

    var doc = new XmlDocument();
    doc.Load(source);
    var nsmgr = new XmlNamespaceManager(doc.NameTable);
    nsmgr.AddNamespace("app", "http://www.weather.gov/forecasts/xml/OGC_services");
    var firstPoint = doc.SelectSingleNode("//app:Forecast_Gml2Point", nsmgr);
    

    Note that the namespace aliases are merely conveniences, and don't have to match between the document and the namespace-manager - but it is probably easier if they do.

    0 讨论(0)
提交回复
热议问题