Существенная проблема двоякая. Во-первых, как вы знаете, XML чувствителен к регистру.
Во-вторых, XML не «определяет» имя атрибута ID. В отличие от HTML, который говорит, что элементы могут иметь атрибут 'id', XML сам по себе не имеет. Существует понятие типа xs:ID
, но имя атрибута (например, ID
, Id
, id
или myIdentifier
) по умолчанию не предоставляется.
Для справки см. W3C Как следует решить проблему идентификации семантики идентификатора ...? .
Итак, некоторые программы синтаксического анализа предполагают id
, некоторые предполагают, что любой из id
, ID
, Id
, некоторые предполагают, что нет.
Точнее говоря, я обычно вижу использование ID
в подписи SAML. Обычно используемая команда xmlsec1
не идентифицирует имя для использования, поэтому вам придется. Например:
xmlsec1 --decrypt --privkey-pem /foo/key.pem --id-attr:ID EncryptedKey my.xml
указывает xmlsec1 объявить именованный атрибут ID
на EncryptedKey
узлах (только) как известный атрибут xs: ID. Оказывается, к добавке: вы можете сделать несколько:
xmlsec1 --decrypt ... --id-attr:Id EncryptedKey --id-attr:ID EncryptedKey --id-attr:id EncryptedKey
будет использовать любой из узлов EncryptedKey.
(Вы можете объявить foobar
атрибутом xs: ID, и он будет отлично работать, поэтому, если ваш исходный XML имеет что-то вроде:
<node foobar="1234"/>
<otherNode URI="#1234"/>
использование:
xmlsec1 --id-attr:foobar node ...