English 中文(简体)
要素。 Add(XElement)自动增加儿童名字的空间?
原标题:XElement.Add(XElement) automatically adds namespace to child node?

我正在利用XElement操纵我的Xml档案:寻找目标 no子,然后增加儿童 no子。 但现在我有一个问题。 请允许我说一下我的xml档案。

<Report xmlns="MY_NAMESPACE"
  <Width>100</Width>
  <Height>100</Height>
  <ReportItems>
    <ReportItem>
...
</Report>

我还想加上一个新的<代码><ReportItem>至<ReportItems> node using VB. NET。 http://msdn.microsoft.com/en-us/library/bb387082.aspx”rel=“nofollow” 如何:创建名称空间文件(LINQ to XML)(Visual Basic),其中规定,为了申报和使用名称空间,需要在档案开始时予以进口(与C#不同)。 因此,I do Imports <xmlns=“MY_NAMESPACE”>。 现在,我需要1)找到“<代码>和”;“报告与”; node at first, 和2)添加我的新的术语。 为了迈出第一步,我尝试了。

Dim xmldoc = XDocument.Load(MY_XML_FILE_PATH)
Dim target = xmldoc.Root.Elements("{MY_NAMESPACE}" & "ReportItems").FirstOrDefault

And to do step 2), I did

Dim newNode As XElement = _
    <ReportItem/>
target.Add(newNode)

现在存在问题:如果我没有具体指明“{MY_NAMESPACE}”,那么我根本就找不到ReportItems。 这是因为这种扼杀实际上被用来含蓄地构造XName物体(我知道我为什么可以将NS转让给XName物体),而这个物体被用于搜索。 如果我没有给出曲折的括号,它将在空名空间进行搜索,这样它就能够找到<代码><ReportItems>node, 位于MY_NAMESPACE。 但是,如果我给这个奇怪的括号,最后的xml文档将照此办理:

<Report xmlns="MY_NAMESPACE"
  <Width>100</Width>
  <Height>100</Height>
  <ReportItems>
    <ReportItem>
    <ReportItem xmlns="MY_NAMESPACE">    
...
</Report>

第二张<代码><ReportItem> 是新添加的,但令人痛心的是,这并不是一个有效的文件(M parser在进一步处理xml文档时正在抱怨)。 因此,我怎么能够把这个新项目看上去,完全像现在这样,没有任何名称空间? 这使我.。 我用整天来表示,我需要加上曲折的方括号,以便找到目标节点(它不像上述链接所说的那样做工作,即它自动增加和搜查违约国),但现在它增加了一些不必要的东西? go!

问题回答

我有一个类似的问题,我的解决办法是,在拯救Xml时,排除重复的名称空间:

Dim sb As New StringBuilder()
Dim settings As XmlWriterSettings = New XmlWriterSettings()
settings.NamespaceHandling = NamespaceHandling.OmitDuplicates

Using writer As XmlWriter = XmlWriter.Create(sb, settings)
    Dim xdoc As XDocument = WriteDocument()
    xdoc.Save(writer)
End Using

你们也可以说XDocument。 Save with SaveOptions factors which has OmitDuplicates.





相关问题
Is Shared ReadOnly lazyloaded?

I was wondering when I write Shared ReadOnly Variable As DataType = New DataType() Or alternatively Shared ReadOnly Variable As New DataType() Is it lazy loaded or as the instance initializes? ...

Entertaining a baby with VB.NET

I would like to write a little application in VB.NET that will detect a baby s cry. How would I get started with such an application?

Choose Enter Rather than Pressing Ok button

I have many fields in the page and the last field is a dropdown with list of values. When I select an item in a dropdown and press Enter, it doesn t do the "Ok". Instead I have to manually click on Ok ...

ALT Key Shortcuts Hidden

I am using VS2008 and creating forms. By default, the underscore of the character in a textbox when using an ampersand is not shown when I run the application. ex. "&Goto Here" is not ...

Set Select command in code

On button Click I want to Set the Select command of a Gridview. I do this and then databind the grid but it doesn t work. What am i doing wrong? protected void bttnView_Click(object sender, ...

Hover tooltip on specific words in rich text box?

I m trying to create something like a tooltip suddenly hoovering over the mouse pointer when specific words in the richt text box is hovered over. How can this be done?

热门标签