Переименование значения атрибута XSLT из кода C # - PullRequest
1 голос
/ 07 марта 2019

У меня XSLT, как показано ниже: -

 <ServiceRequest ExternalSystemName="ServiceNow" Company="{ServiceRequest-Company}">
      <xsl:if test="{ServiceRequest-LastResolvedDate} and {ServiceRequest-LastResolvedDate} != ''" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:attribute name="LastResolvedDate">
          <xsl:value-of select="{ServiceRequest-LastResolvedDate}" />
        </xsl:attribute>
      </xsl:if>
      <xsl:if test="{ServiceRequest-ServiceType} and {ServiceRequest-ServiceType} != ''" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:attribute name="ServiceType">
          <xsl:value-of select="'SR'" />
        </xsl:attribute>
      </xsl:if>
...
...

Я хочу переименовать конкретное имя атрибута с помощью кода C #.

Для этого я написал следующий код: -

var property = root.Descendants(elementName).Descendants().Attributes("name").Where(x => x.Value == "LastResolvedDate");
                    foreach (var item in property)
                    {
                        item.Name = "renamed_new_name";
                    }

Этот код дает мне ошибку, что имя атрибута не может быть назначено и доступно только для чтения.

enter image description here

Что может быть возможным решением?

РЕДАКТИРОВАТЬ 1:

Это изменение имени атрибута: -

<xsl:if test="LastResolvedOn/value and LastResolvedOn/value != ''">
                    <xsl:attribute renamed_new_name="LastResolvedOn">
                      <xsl:value-of select="LastResolvedOn/value" />
                    </xsl:attribute>
                  </xsl:if>

Где мне нужно: -

<xsl:if test="LastResolvedOn/value and LastResolvedOn/value != ''">
                    <xsl:attribute name="renamed_new_name">
                      <xsl:value-of select="LastResolvedOn/value" />
                    </xsl:attribute>
                  </xsl:if>

1 Ответ

1 голос
/ 07 марта 2019

Вам необходимо удалить существующий атрибут и добавить новый, например ::

var elements = root.Descendants(elementName).Descendants()
    .Where(x => (string)x.Attribute("name") == "LastResolvedDate");

foreach (var item in elements)
{
    item.Attribute("name").Remove();
    item.Add(new XAttribute("renamed_new_name", "LastResolvedDate"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...