Удалить элемент XML с помощью JavaScript в asp.net c # - PullRequest
0 голосов
/ 25 января 2010

Как мы можем удалить узел XML в JavaScript в asp.net 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>

Ответы [ 3 ]

2 голосов
/ 25 января 2010
x[i].childNodes[0].nodeValue

Первый дочерний узел <Object> является текстовым узлом. Его nodeValue будет набором пробелов: "\n " ведет к первому дочернему элементу (<ObjectNr>).

Если вы ищете текст внутри первого узла <ObjectNr>, лучше скажите:

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

при условии, что внутри этого элемента всегда есть один текстовый узел. Если вам нужно обслуживать его, возможно, нет текста или он содержит другой контент, кроме обычного текста, вам придется написать небольшую функцию для обхода содержимого, получающего текст (поскольку MSXML не поддерживает свойство DOM Level 3 Core textContent) .

0 голосов
/ 26 января 2010

У меня есть еще одна ошибка ... Я попробовал другой подход и сделать это .. нашел в .. http://www.w3schools.com/DOM/dom_loadxmldoc.asp

<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);
            }
        }

Теперь он выдает предупреждение (0), но затем выдает «Недопустимый аргумент».

Последней ошибкой было то, что у меня в операторе неверные символы, потому что в нем отсутствовала функция loadXMLDoc, которую можно найти на сайте w3schools

0 голосов
/ 25 января 2010

Возможно, вам нужно перебрать элементы XML в обратном порядке (от последнего элемента к первому элементу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...