Причина, по которой большая часть вашего результата пуста, заключается в том, что вы делаете:
<xsl:for-each select="VehicleDetailsVO">
из контекста:
<xsl:template match="/decreaseStickerVO">
У текущего узла decreaseStickerVO
нет [ 116] детей, поэтому ваша инструкция xsl:for-each
ничего не выбирает. Вы получите другой результат, если сделаете:
<xsl:for-each select="vehicleDetailsVOList/VehicleDetailsVO">
Но если - как кажется - вы хотите сохранить все в существующем XML как есть, то вы можете сделать это просто:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Или даже короче:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Функцией, которую Вы хотите использовать, является LogonUser. Можно даже быть дополнительно-спокойными и указать флаг LOGON32_LOGON_SERVICE, который проверяет, чтобы удостовериться, что у пользователя есть соответствующие полномочия выполнить сервис.
Я реализовал это использование функции LogonUser как Вы, парни упомянули (между прочим, этот сервис требует WinXP SP2 или позже таким образом, я не волнуюсь по поводу проблемы полномочия). Однако это не является довольно рабочим, как я надеялся. Если я называю QueryServiceConfig, lpServiceStartName находится в формате ".\accountname". Если я передаю эту строку, как к LogonUser, она перестала работать. Я принимаю часть, прежде чем '\' представит машину, на которой принадлежит пользователь?
Кроме того, если я называю ChangeServiceConfig, указывающий "LocalSystem" и "" для lpServiceStartName и lpPassword параметров соответственно, это хорошо работает. Однако вызов LogonUser с этими параметрами не работает.
Я действительно хотел бы использовать тот же синтаксис, который SCM использует для имен учетной записи.
LogonUser является каноническим способом сделать это, хотя Microsoft несколько препятствует ему.