2010-11-16 3 views
1

Почему каждый раз, когда я пытался добавить новый атрибут к узлу, он добавляет дополнительный атрибут "xmlns="? любым способом предотвратить это?xml document, set attribute question

public void changeProjToAssembly(string projPath,string projRefName) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(projPath); 

    XmlNode projectReferenceNode; 
    XmlNode itemGroupNode; 
    XmlNode root = doc.DocumentElement; 

    string s = doc.DocumentElement.GetNamespaceOfPrefix(""); 
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
    nsmgr.AddNamespace("rs", s); 

    projectReferenceNode = root.SelectSingleNode("/rs:Project/rs:ItemGroup/rs:ProjectReference[rs:Name='GS_POSLibrary1']", nsmgr); 
    itemGroupNode = root.SelectSingleNode("/rs:Project/rs:ItemGroup[rs:ProjectReference/rs:Name='GS_POSLibrary1']", nsmgr); 

    XmlElement newCd = doc.CreateElement("Reference"); 
    newCd.SetAttribute("Include", "dasdsad");   

    newCd.InnerXml = "<HintPath>" + ".//sadssa/asdsad" + "</HintPath>"+ 
    "<HintPath>" + ".//sadssa/asdsad" + "</HintPath>" + 
    "<HintPath>" + ".//sadssa/asdsad" + "</HintPath>"; 

    itemGroupNode.ReplaceChild(newCd, projectReferenceNode); 

    Console.WriteLine("Display the modified XML document...."); 

    doc.Save(Console.Out);   
} 

XML:

<ItemGroup> 
<ProjectReference Include="..\common\librarycomponents\exportdb\GenerateDocLibrary.vbproj"> 
    <Project>{9B3C9E8B-436B-4A16-87A8-E72CB2FFC6E6}</Project> 
    <Name>GS_POSLibrary</Name> 
    <Private>False</Private> 
</ProjectReference> 
<Reference Include="dasdsad" xmlns="">//I only need the Include Atrribute 
    <HintPath>.//sadssa/asdsad</HintPath> 
    <HintPath>.//sadssa/asdsad</HintPath> 
    <HintPath>.//sadssa/asdsad</HintPath> 
</Reference> 

+2

Возможно, вы сможете бы продемонстрировать свой код? Как вы ожидаете, что мы узнаем, почему ваш код добавляет атрибут «xmlns», не показывая ваш код, даже если у нас есть ключ? Мне кажется противоречивым. –

+0

Извините, что я добавил код сейчас, я пытаюсь отредактировать ссылку на проект в файле vbproj, который будет изменен как refreence сборки, непосредственно отредактировав его содержимое xml. – 3ggerhappy

+0

Пожалуйста, покажите полученный XML. Кроме того, скажите, почему вы заботитесь об атрибуте xmlns. –

ответ

2

Вы создали свой Reference элемент в пустом пространстве имен, а не в rs пространстве имен. Попробуйте использовать doc.CreateElement("Reference", s);

+0

Омг это сработало, спасибо, атрибут xmlns ушел – 3ggerhappy

+1

@ 3ggerhappy, я просто ответил на очень похожий вопрос по адресу http://stackoverflow.com/questions/4189348/how-can-i-prevent-appendchild-from -adding-the-xmlns/4189693 # 4189693 и объяснил, почему это происходит так, как было. Небольшое понимание пространств имен поможет вам избежать этих недоразумений в будущем. – LarsH

0

Я думаю, это потому, что вы добавляете пустое пространство имен в документ здесь:

string s = doc.DocumentElement.GetNamespaceOfPrefix(""); 
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("rs", s); 

И тогда, когда вы добавляете к этому узлу он с, добавить свои пространства имен, которое вы добавили.

+0

-1: Извините, это не так. –

+0

Вам не понятно, почему это не так? – msarchet

+0

Я сделал, в своем ответе. –