Scala удаляет элемент xml из внутреннего дочернего элемента - PullRequest
1 голос
/ 29 июня 2019

Я пытался удалить дочерний элемент из xml, используя Scala xml. Я потратил так много времени, чтобы понять, как удалить дочерний элемент, но ничего не работает. Пожалуйста, помогите

Входной XML:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <Header xmlns="http://abcde.com/reportserv">
            <RequestId>kfgndfgldfknbdfbd</RequestId>
            <ResponseTime>13.98</ResponseTime>
        </Header>
    </soap:Header>
    <soap:Body>
        <DetailResponse xmlns="http://abcde.com/reportserv">
            <DetailResult>
                <Detail>
                    <Domain>Not Available</Domain>
                    <Name />
                    <Email />
                    <PostalCode />
                </Detail>
                <Detail>
                    <Domain>Available</Domain>
                    <Name />
                    <Email />
                    <Phone>143-234-1234</Phone>
                    <PostalCode />
                </Detail>
                <Detail>
                    <Domain>Not Available</Domain>
                    <Name />
                    <Email>tp1@gmail.com</Email>
                    <Phone />
                    <PostalCode />
                </Detail>
            </DetailResult>
        </DetailResponse>
    </soap:Body>
</soap:Envelope>

Из приведенного выше xml я хотел бы удалить элементы электронной почты и телефона

Выходной XML:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <Header xmlns="http://abcde.com/reportserv">
            <RequestId>kfgndfgldfknbdfbd</RequestId>
            <ResponseTime>13.98</ResponseTime>
        </Header>
    </soap:Header>
    <soap:Body>
        <DetailResponse xmlns="http://abcde.com/reportserv">
            <DetailResult>
                <Detail>
                    <Domain>Not Available</Domain>
                    <Name />
                    <PostalCode />
                </Detail>
                <Detail>
                    <Domain>Available</Domain>
                    <Name />
                    <PostalCode />
                </Detail>
                <Detail>
                    <Domain>Not Available</Domain>
                    <Name />
                    <PostalCode />
                </Detail>
            </DetailResult>
        </DetailResponse>
    </soap:Body>
</soap:Envelope>

Код, который я пробовал, выглядит только на один уровень

def deleteNodes(n: Elem, f: (Node) => Boolean) = {
  n.child.foldLeft(NodeSeq.Empty)((acc, elem) => if (f(elem)) acc else acc ++ elem)
}


var deleted_elements = person.copy(child = deleteNodes(person, (elem) => (elem.label=="Email"|| elem.label=="Phone")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...