sxd-document / sxd-xpath не может проанализировать XML

Я хотел сопоставить конкретный блок if в java

   ...
   ...
   if(isTrue){
       doAction();

   }
...
...
}

. Если я использую regExp

if \(isTrue(.|\n)*}

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

if \(!isTrue([^}.]|\n)*}

, чтобы исключить заключительную скобку из соответствия шаблону.

1
задан Shepmaster 16 January 2019 в 14:28
поделиться

3 ответа

Ваш XML-файл использует нестандартное пространство имен rdf, но не определяет его. Вам необходимо определить пространство имен в XML:

<organisation xml:id="a17649"
              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

Некоторые анализаторы XML позволяют объявлять пространства имен в вашем коде вне документа XML, но я не нашел ничего подобного после быстрого просмотра в sxd_document документах .

0
ответ дан Shepmaster 16 January 2019 в 14:28
поделиться

Учитывая сообщение об ошибке, я ожидаю, что вам нужно объявить пространство имен rdf, прежде чем использовать его в имени атрибута rdf:resource.

(Ваша проблема не имеет ничего общего с XPath - она ​​завершается неудачно при попытке проанализировать XML до запуска какого-либо кода XPath.)

0
ответ дан djc 16 January 2019 в 14:28
поделиться

Ваш код синтаксического анализа XML должен работать по счастливому пути, когда содержимое XML корректно.

Несмотря на то, что он работает без проблем в «счастливом пути», поскольку вы используете expect в коде вместо обработки ошибок, программа паникует в сценарии ошибок.

Вы можете изменить код на следующий, чтобы лучше распечатать ошибку:

let package = parser::parse(&contents);

match package {
    Ok(package) => {
        let document = package.as_document();
        let value = evaluate_xpath(&document, "/root").expect("XPath evaluation failed");
        println!("value: {:?}", value);
    }
    Err(err) => {
        println!("{:?}", err);
    }
}

После этого исправления вы заметите, что код печатает ошибку UnknownNamespacePrefix.

Эта ошибка возникает, когда содержимое XML имеет пространства имен, которые не объявлены в самом файле XML.

В вашем XML-файле вам нужно указать свои пространства имен, которые вы не указали для следующего:

<organisation xml:id="a17649">

Вам необходимо добавить пространство имен:

<organisation xml:id="a17649" xmlns:rdf="http://www.w3.org/1999/xhtml">

Даже один раз вы объявили rdf пространство имен таким образом, вы также используете пространство имен dbk, которое, вероятно, зависит от самого вашего проекта. Вам также нужно будет указать это пространство имен:

<organisation xml:id="a17649" xmlns:rdf="http://www.w3.org/1999/xhtml" xmlns:dbk="/path/to/dbk">

После этих изменений ваша проблема должна быть решена

0
ответ дан Shepmaster 16 January 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: