#xml #xslt
#xml #xslt
Вопрос:
Моя цель — извлечь определенные ключи из формата KeyPass (2.x) xml с помощью xsl.
XML KeyPass выглядит следующим образом:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<KeePassFile>
<Meta>
<Generator>KeePass</Generator>
</Meta>
<Root>
<Group>
<UUID>NqDrFtUxs0SiwVPehBpONg==</UUID>
<Name>ExampleDatabase</Name>
<Entry>
<String>
<Key>Notes</Key>
<Value>Notes</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">Password</Value>
</String>
<String>
<Key>Title</Key>
<Value>Sample Entry</Value>
</String>
<String>
<Key>URL</Key>
<Value>http://keepass.info/</Value>
</String>
<String>
<Key>UserName</Key>
<Value>User Name</Value>
</String>
</Entry>
<Entry>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">12345</Value>
</String>
<String>
<Key>Title</Key>
<Value>Sample Entry #2</Value>
</String>
<String>
<Key>URL</Key>
<Value>http://keepass.info/help/kb/testform.html</Value>
</String>
<String>
<Key>UserName</Key>
<Value>Michael321</Value>
</String>
</Entry>
<Group>
<UUID>mec/n7Hkf0uZMDMrZyaO7A==</UUID>
<Name>General</Name>
</Group>
<Group>
<UUID>mBKJFmgV6UOQQmXlmhZt/A==</UUID>
<Name>Windows</Name>
</Group>
<Group>
<UUID>CKbqJW0RwUKdUT/go0EnJg==</UUID>
<Name>Network</Name>
</Group>
<Group>
<UUID>B6yKdAooSkOj6 uvrGDURQ==</UUID>
<Name>Internet</Name>
</Group>
<Group>
<UUID>4IG7YyeaY0yHbnuUtJMx5A==</UUID>
<Name>eMail</Name>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">1.Os0mnyE6ESeL1yGnTsX6</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry1</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>Some@Email.com</Value>
</String>
<History>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">Os0mnyE6ESeL1yGnTsX6</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry1</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>FirsteMail@Adress.com</Value>
</String>
</Entry>
</History>
</Entry>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">2.RlYOCgZDirnjbjcu8Td2</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry2</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>SecondeMail@Adress.com</Value>
</String>
<History>
<Entry>
<String>
<Key>Notes</Key>
<Value>Login für den Plesk Server.</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">RlYOCgZDirnjbjcu8Td2</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry2</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>Adress@Bla.com</Value>
</String>
</Entry>
</History>
</Entry>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">3.RzJsbTeK29MS1GnUiTlb</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry3</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>ThirdeMail@Adress.com</Value>
</String>
<History>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">RzJsbTeK29MS1GnUiTlb</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry3</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>ThirdeMail@Adress.com</Value>
</String>
</Entry>
</History>
</Entry>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">4.8BONlQkfKRHpPdTL3luh</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry4</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>eMail@Adress.com</Value>
</String>
<History>
<Entry>
<String>
<Key>Notes</Key>
<Value>Some Note</Value>
</String>
<String>
<Key>Password</Key>
<Value ProtectInMemory="True">8BONlQkfKRHpPdTL3luh</Value>
</String>
<String>
<Key>Title</Key>
<Value>Entry4</Value>
</String>
<String>
<Key>URL</Key>
<Value />
</String>
<String>
<Key>UserName</Key>
<Value>eMail@Adress.com</Value>
</String>
</Entry>
</History>
</Entry>
</Group>
<Group>
<UUID>A/OASMueGE ZBzEpvrTjow==</UUID>
<Name>Homebanking</Name>
</Group>
</Group>
<DeletedObjects />
</Root>
</KeePassFile>
Я хочу получить доступ к значению одного тега ‘Value’. Так, например, значение групповой электронной почты в заголовке категории или пароле. Тогда значение будет (eMail / Title:) ‘Entry1’. Мне просто нужен xsl для сбора информации о KeePass.xml .
Ответ №1:
Я предполагаю, что вы имеете в виду UserName
ключ, который встречается в нем четыре раза Group
, по одному разу в каждом дочернем Entry
элементе. В этом случае вам нужно выбрать третье Entry
, чтобы получить третье электронное письмо. В вашем коде вы можете добиться этого, используя позиционный предикат для Entry
:
<xsl:for-each select="./Entry[3]/String">
<xsl:if test="Key='UserName'">
<xsl:value-of select="Value"/>
<xsl:text>amp;#xA;</xsl:text>
</xsl:if>
</xsl:for-each>
Комментарии:
1. «KeePass NqDrFtUxs0SiwVPehBpONg== ExampleDatabase Примечания Примечания Пароль Пароль Заголовок Пример ввода URL ht[…]». Фрагмент кода возвращает все данные. Как я могу отфильтровать результат по одному значению. Например, «KeePassFile / Root / Group / Group / Entry / String», где вторая группа — это, например, «Электронная почта» и ключ «Имя пользователя». Результатом будет ‘Some@Email.com ‘
2. Пожалуйста, отредактируйте свой вопрос и точно опишите, что вам нужно, используя полный пример кода. Ваш вопрос неясен.
Ответ №2:
Мое текущее решение:
<xsl:for-each select="KeePassFile/Root/Group/Group[child::Name='eMail']/Entry[1]/String[Key='UserName']">
<td><xsl:value-of select="Value"/></td>
</xsl:for-each>