Arhn - архитектура программирования

Использование XSLT для устранения узла на основе одного или нескольких текстовых значений в XML для Mythtv

Учитывая пример (сокращенный) программный гид MythTV XML:

<?xml version='1.0' encoding='utf-8'?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'>
    <SOAP-ENV:Body><ns1:downloadResponse SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:ns1='urn:TMSWebServices'>
    <xtvdResponse xsi:type='ns1:xtvdResponse'>
    <messages xsi:type='ns1:messages'>
    <message>Your subscription will expire: 2017-07-25T05:40:43Z</message>
    </messages>
    <xtvd from='2016-06-28T00:00:01Z' to='2016-07-12T00:00:01Z' schemaVersion='1.3' xmlns='urn:TMSWebServices' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='urn:TMSWebServices http://dd.schedulesdirect.org/tech/xml/schemas/tmsxtvd.xsd'>
    <program id='MV000084150000'>
    <title>Across 110th Street</title>
    <mpaaRating>R</mpaaRating>
    <starRating>**+</starRating>
    <runTime>PT01H42M</runTime>
    <year>1972</year>
    <description>Mobsters and crooked police (Anthony Quinn, Yaphet Kotto) hunt three hoods who have robbed a mob operation in Harlem.</description>
    <advisories>
    <advisory>Adult Situations</advisory>
    <advisory>Language</advisory>
    <advisory>Violence</advisory>
    </advisories>
    </program>
    <program id='MV000083800000'>
    <title>Conan the Barbarian</title>
    <mpaaRating>R</mpaaRating>
    <starRating>***</starRating>
    <runTime>PT02H09M</runTime>
    <year>1982</year>
    <description>Pit fighter Conan (Arnold Schwarzenegger) sets out with a Mongol and a queen (Sandahl Bergman) to take his father&apos;s sword from a snake king (James Earl Jones).</description>
    <advisories>
    <advisory>Adult Situations</advisory>
    <advisory>Nudity</advisory>
    <advisory>Graphic Violence</advisory>
    </advisories>
    </program>
    </xtvd>
    </xtvdResponse>
    </ns1:downloadResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope> 

Я пытаюсь разработать XSLT, который удалит полный узел <program>, когда <advisory> содержит текст «Нагота» или «Краткая нагота».

Вот что я пытался, просто чтобы обратиться к «Наготе»:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1"/>

<xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>
 <xsl:template match="program[descendant::advisory[text() = 'Nudity']]"/>
</xsl:stylesheet>

... но это не работает с XML MythTV, хотя, если я попробую тот же базовый подход с гораздо более простым XML, он сработает:

  <root>
<program>
<advisories>
<advisory>blabla</advisory>
</advisories>
</program>
<program>
<advisories>
<advisory>http://media.blabla.pdf</advisory>
</advisories>
</program> 
<program>
<advisories>
<advisory>http://media2.blabla.pdf</advisory>
</advisories>
</program> 
<program>
<advisories>
<advisory>http://media.otherblabla</advisory>
</advisories>
</program> 
</root>

Когда я запускаю xsltproc для применения XSLT к простому XML с параметром --verbose, я получаю некоторые выходные данные (xsltEvalXPathPredicate: возвращает 1), которые я не вижу в XML MythTV, поэтому я предполагаю, что мне нужно применить какую-то технику XPath. , но я не уверен.

Кто-нибудь может подсказать, что делать, чтобы решить эту проблему? Я намерен задокументировать, как сделать фильтр расписания бесплатных программ, чтобы определенные шоу просто не предлагались/не отображались в списке MythTV.

02.07.2016

Ответы:


1

Искомый узел находится в пространстве имен urn:TMSWebServices. Вам нужно определить его в своем XSLT, например xmlns:tv="urn:TMSWebServices", а затем использовать его в своем XPath, например

tv:program[descendant::tv:advisory[text() = 'Nudity']]

Эта же проблема решается в других вопросах (вот один, который я быстро нашел), хотя я понимаю, что сложно понять, что делать. выполните поиск, если вы не знакомы с пространствами имен XML и их влиянием на XSLT.

02.07.2016

2

Спасибо Питеру Куперу-младшему за такую ​​большую помощь, вот полный XSLT для решения проблемы:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tv="urn:TMSWebServices">
<xsl:output method="xml" encoding="ISO-8859-1"/>

<xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>
 <xsl:template match="tv:program[descendant::tv:advisory[text() = 'Nudity' or text() = 'Brief Nudity']]"/>
</xsl:stylesheet>
02.07.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..