Для справки я использую Nmap 7.8 и пытаюсь отформатировать вывод с помощью файла xsl. Внутри xsl-файла я вызываю второй файл rules. xml для сравнения и добавления дополнительной информации. Это структура правил. xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Item id="1">
<info>Rule Information</info>
<port>123</port>
<port>321</port>
</Item>
</root>
Когда я пытаюсь распечатать вывод порта nmap с помощью <xsl:value-of select="@portid"/>
, он работает, однако, если я выполняю if или выбираю / при работе терпит неудачу. Когда я делаю stati c сравнение <xsl:if test="port = 321">
, он работает с любым значением порта.
<xsl:for-each select="ports/port">
<xsl:choose>
<xsl:when test="state/@state = 'open'">
<xsl:variable name="rules" select="document('rules.xml')"/>
<xsl:for-each select="$rules/root/Item">
<xsl:if test="port = @portid">
<xsl:value-of select="info"/>
</xsl:if>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:for-each>
Желаемое поведение - l oop через все порты в выводе nmap и добавление дополнительных информационных тегов в элементе, который содержит соответствующий тег порта. Сопоставление - 1 элемент для многих портов, поэтому я хотел бы избежать правил индексации. xml с портами на верхнем уровне, чтобы предотвратить дублирование.