2010-01-25 5 views
0

asp.net C에서 javascript의 xml 노드를 제거하는 방법은 무엇입니까? asp.net에서 javascript를 사용하여 xml 요소를 제거하십시오. C#

난이 시도하지만 나에게 오류를 부여

...

ScriptManager.RegisterStartupScript(UpdatePanel1,this.GetType(),"RemoveDock", 
       string.Format(@"function _removeDock() 
           {           
            xmlDoc = loadXMLDoc('c:\teste\Config.xml'); 
            x= xmlDoc.getElementsByTagName('Object');          
            for (i=0;i<x.length;i++) 
            { 
             if(x[i].childNodes[0].nodeValue == '{0}') 
             { 
              xmlDoc.documentElement.removeChild(x[i]); 
             } 
            } 
           };", HiddenField1.ClientID),true); 

내 XML이

<?xml version="1.0"?> 
<Form NrForm="Value" State="Value"> 
    <Object Type="TextBox"> 
    <ObjectNr>texto valor</ObjectNr> 
    <Type>TextBox</Type> 
    <Id>RadDocka47ebc1f-848a-4bef-8f31-bc680d776564</Id> 
    <x1>Text Label</x1> 
    <x2>35</x2> 
    <x3>Text</x3> 
    <x4>Text</x4> 
    </Object> 
    <Object Type="TextBox"> 
    <ObjectNr>texto valor</ObjectNr> 
    <Type>TextBox</Type> 
    <Id>RadDocka47ebc1f-848a-4bef-8f31-bc680d776564</Id> 
    <x1>Text Label</x1> 
    <x2>35</x2> 
    <x3>Text</x3> 
    <x4>Text</x4> 
    </Object> 
</Form> 

내가 아마이

<Object Type="TextBox"> 
     <ObjectNr>texto valor</ObjectNr> 
     <Type>TextBox</Type> 
     <Id>RadDocka47ebc1f-848a-4bef-8f31-bc680d776564</Id> 
     <x1>Text Label</x1> 
     <x2>35</x2> 
     <x3>Text</x3> 
     <x4>Text</x4> 
</Object> 
+1

에서 찾을 수 있습니다 loadXMLDoc 기능 그리고 당신은되어지고 오류 누락했기 때문에 내가 문에 잘못된 caracters을 가지고 있었다 ...? – Oded

+0

마지막 오류는 w3schools 사이트에서 찾을 수있는 loadXMLDoc 함수가 누락 되었기 때문에 문에 잘못된 캐랙터가 있음을 나타냅니다. – SlimBoy

+0

문자열 리터럴에서 백 슬래시를 두 번 사용하여 경로에 포함해야합니다. 그렇지 않으면'\ t'는 JS의 탭 문자입니다. 그러나 'loadXMLDoc'에 대한 인수에는 백 슬래시가 없어야합니다. Windows 경로명이 아닌 URL을 사용하기 때문입니다. – bobince

답변

0

중 하나를 제거하려면 역순으로 XML 요소를 반복해야합니다 (마지막 요소부터 첫 번째 요소까지).

2
x[i].childNodes[0].nodeValue 

<Object>의 첫 번째 childNode는 텍스트 노드입니다. 그것의 nodeValue은 첫 번째 요소 자식 (<ObjectNr>)까지 이어지는 "\n        " 인 공백의 묶음이 될 것입니다.

x[i].getElementsByTagName('ObjectNr').firstChild.data 

를 해당 요소 내부에 하나 개의 텍스트 노드는 항상 거기에 가정 :

하면 말 더 나은 첫 번째 <ObjectNr> 노드 안의 텍스트를 찾고 있다면. 텍스트가 없거나 일반 텍스트 이외의 다른 내용을 포함하고 있다면 아마도 MSXML이 DOM Level 3 Core textContent 속성을 지원하지 않기 때문에 텍스트를 가져 오는 내용을 걷는 작은 함수를 작성해야 할 것입니다.

+0

감사! 나는 그것을 바꿨지 만 그것은 여전히 ​​나에게 오류를주고있다. – SlimBoy

0

나는 다른 하나의 오류를 발견 ... 는 내가 가지 다른 aproach을 시도하고 이렇게 .. 을 한 ...

<script> 
function loadXMLDoc() { 
      alert("0"); 
      var xhttp; 
      var url = 'c:\teste\Config.xml'; 
      var hiden1 = document.getElementById('HiddenField'); 
      if (window.XMLHttpRequest) { 
       xhttp = new XMLHttpRequest(); 
       xhttp.open('GET', url, true, "", ""); 
       xhttp.send(''); 
       alert("1"); 
       xmlDoc = xhttp.responseXML; 

       x = xmlDoc.getElementsByTagName('Object'); 
       for (i = 0; i < x.length; i++) { 
        if (x[i].getElementsByTagName('Id').firstChild.data == hiden1.value) { 
         xmlDoc.documentElement.removeChild(x[i]); 
        } 
       } 
       return xhttp.responseXML; 
      } 
      else if (window.ActiveXObject) {   
       alert("2"); 
      } 
      else { 
       alert("Your browser does not support XMLHTTP."); 
      } 
     } 
    </script> 


void dock_Command(object sender, DockCommandEventArgs e) 
     { 
      if (e.Command.Name == "Close") 
      { 
       ScriptManager.RegisterStartupScript(
       UpdatePanel1, 
       this.GetType(), 
       "RemoveDock", 
       string.Format(@"function _removeDock() {{ 
    Sys.Application.remove_load(_removeDock); 
    $find('{0}').undock(); 
    $get('{1}').appendChild($get('{0}')); 
    $find('{0}').doPostBack('DockPositionChanged'); 
    loadXMLDoc();  
}}; 
Sys.Application.add_load(_removeDock);", ((RadDock)sender).ClientID, UpdatePanel1.ClientID), 
       true); 
      } 
     } 

http://www.w3schools.com/DOM/dom_loadxmldoc.asp

을 지금은 경고 (0) 할 수 있지만 그때는 제공 "잘못된 인수".

마지막 오류는 W3 스쿨 사이트

관련 문제