![](/img/trans.png)
[英]Edit and Delete data from XML file using ASP.net and VB.net (or C#)
[英]getting data from XML using asp.net Vb.net
我有一個這樣的XML文檔:
<?xml version='1.0' encoding='UTF-8'?>
<GateDocument>
<!-- The document's features-->
<GateDocumentFeatures>
<Feature>
<Name className="java.lang.String">MimeType</Name>
<Value className="java.lang.String">text/html</Value>
</Feature>
</GateDocumentFeatures>
<!-- The document content area with serialized nodes -->
<TextWithNodes><Node id="0" />astralis<Node id="8" /> <Node id="9" />ltd<Node id="12" />
<Node id="14" />{<Node id="15" />DOCUMENT<Node id="23" />}<Node id="24" /> <Node id="25" />{<Node id="26" />TYPE<Node id="30" />}<Node id="31" />EX-<Node id="34" />10<Node id="36" />.<Node id="37" />12<Node id="39" /> <Node id="40" />{<Node id="41" />SEQUENCE<Node id="49" />}<Node id="50" />3<Node id="51" /> <Node id="52" />{<Node id="53" />FILENAME<Node id="61" />}<Node id="62" />e<Node id="63" />300201<Node id="69" />_<Node id="70" />ex<Node id="72" />10<Node id="74" />-<Node id="75" />12<Node id="77" />.<Node id="78" />txt<Node id="81" /> <Node id="82" />{<Node id="83" />DESCRIPTION<Node id="94" />}<Node id="95" />
</TextWithNodes>
<Annotations>
.
.
.
.
.
</Annotations>
<Annotations Name="Original markups">
.
.
.
.
</Annotations>
</GateDocument>
我已經使用vb.net/asp.net在XMLDocument中加載了該XML。 我需要在id> 16和Id <30的節點之間的數據為“} {TYPe}”,請注意,這不是屬性的值。 它是節點之間的數據。 我創建了以下代碼,但速度很慢。
Dim sb As New StringBuilder()
Dim document As New XPathDocument(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/gate_xml_output.xml"))
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim iterator As XPathNodeIterator = navigator.Select("//TextWithNodes/node()[preceding-sibling::Node[@id=" & startNode & "] and following-sibling::Node[@id=" & endNode & "]]")
While iterator.MoveNext()
sb.Append(iterator.Current.Value & " ")
End While
可能是我需要修改以下代碼:
XDocument doc = XDocument.Parse(@"<TextWithNodes>...</TextWithNodes");
string result = string.Join(" ",
doc.Root
.Nodes()
.SkipWhile(n => n.NodeType != XmlNodeType.Element ||
(int)((XElement)n).Attribute("id") != 16)
.TakeWhile(n => n.NodeType != XmlNodeType.Element ||
(int)((XElement)n).Attribute("id") != 30)
.OfType<XText>());
// result == "pet DOCUMENT"
我需要提供給XDocument.Parse。
請提出建議。
我使用的范圍是15到30
XDocument xml = XDocument.Load("file.xml");
var firstElement = xml.Descendants().Where(x => x.Name == "Node" && x.Attribute("id").Value=="15").FirstOrDefault();
var lastElement = xml.Descendants().Where(x => x.Name == "Node" && x.Attribute("id").Value == "30").FirstOrDefault();
var response = firstElement.NodesAfterSelf().Where(x => lastElement.NodesBeforeSelf().Contains(x));
這將返回元素。 您可以使用ToString()獲取內容
我認為您在說的是如何使用XDocument.Parse
因為您的XML從外觀上看是在外部文件中,所以最好使用
XDocument doc = XDocument.Load("myXmlFile.xml");
然后使用LINQ to XML作為樣本。 道歉,如果我誤解了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.