2

XmlDocument と XmlNode を使用して xml ファイルを操作しています。「Language」という有効なノードをルートに追加したいとします。次のようなコードを使用します。

Dim languageNode As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Language", Nothing)
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)

ここで、xmlDoc は XmlDocument オブジェクトであり、既に読み込まれています。ただし、操作後のxmlファイルでは、次のように表示されます。

<Language xmlns="">en-US</Language>

そして、これは検証に合格しません。とにかく名前空間を取り除く方法はありますか? ありがとう!

更新: ローカル レポートを定義する .rdlc ファイルを編集し、xml 形式を使用しています。ファイルの一部は次のようになります。

<?xml version="1.0" encoding="utf-16"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" 
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

<Language xmlns="">en-US</Language>
...

通常、使用中の名前空間はそれほど多くないはずですが、xslt から生成しています。ただし、このファイルの生成後に言語ノードが追加されます。私のコードは次のようになります。

Dim xmlRdlc As New XmlDocument()
xmlRdlc.Load(file)    
Dim root As XmlNode = xmlRdlc.DocumentElement()
Dim languageNode As XmlNode = xmlRdlc.CreateNode(XmlNodeType.Element, "Language", Nothing)
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)
xmlRdlc.Save(file)

では、次のように目的のノードを追加するにはどうすればよいですか。

<Language>en-US</Language>
4

1 に答える 1

3

名前空間を指定する必要があります。メソッドの最後のパラメーターとして「http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition」を渡します。

Dim xmlRdlc As New XmlDocument()
xmlRdlc.Load(file)    
Dim root As XmlNode = xmlRdlc.DocumentElement()
Dim languageNode As XmlNode = xmlRdlc.CreateNode(XmlNodeType.Element, "Language", _
    "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
languageNode.InnerText = "en-US"
root.AppendChild(languageNode)
xmlRdlc.Save(file)

ところで、これは LINQ to XML を使用するとよりクリーンになります。

Dim rdlcNS As XNamespace = "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"
Dim xmlRdlc = XDocument.Load(file)
xmlRdlc.Root.Add(New XElement(rdlcNS + "Language", "en-US"))
xmlRdlc.Save(file)

(VB.NET への換算は概算です。マイレージは異なる場合があります。)

于 2011-10-28T14:03:04.667 に答える