Исключение platformnotsupportedexception: XSLCompiledTransform.Load (xslt) не загружает файл xslt с помощью < / msxsl: script > в целевой среде .net Core 2.1

Люди утверждают, что нельзя удалить из коллекции, которая повторяется в цикле foreach. Я просто хотел указать, что это технически неверно и точно описывает (я знаю, что вопрос OP настолько продвинут, чтобы избежать этого, чтобы понять это) код, лежащий в основе этого предположения:

    for (TouchableObj obj : untouchedSet) {  // <--- This is where ConcurrentModificationException strikes
        if (obj.isTouched()) {
            untouchedSet.remove(obj);
            touchedSt.add(obj);
            break;  // this is key to avoiding returning to the foreach
        }
    }

Не исключено, что вы не сможете удалить из итерированного Colletion, а затем продолжить, после чего продолжить. Следовательно, break в коде выше.

Извиняется, если этот ответ является несколько специализированным прецедентом и более подходит для исходного потока , из которого я пришел сюда, отмеченный как дубликат (несмотря на то, что этот поток выглядит более нюансированным) этого и заблокирован.

0
задан Deepali 15 January 2019 в 15:24
поделиться

1 ответ

Согласно репозиторию dotnet corefx github, эта функция не поддерживается в .NET Core, и в настоящее время нет планов ее реализации. Более подробную информацию можно найти здесь здесь

К сожалению, похоже, что пока вы можете только придерживаться .NET Framework.

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

Мне нравится вызов, поэтому я поиграл с вашим XSLT и нашел решение, которое будет работать в .NET Core.

Нам нужно удалить JScript, чтобы избавиться от этой ошибки. Поэтому нам нужно заменить ваши методы JScript на методы XSLT.

Чтобы удалить replace-str, я оглянулся и нашел шаблон XSLT, который заменит вам строку. Это ответ , который я использовал

Добавьте шаблон в свой XSLT

<xsl:template name="string-replace-all">
  <xsl:param name="text" />
  <xsl:param name="replace" />
  <xsl:param name="by" />
  <xsl:choose>
    <xsl:when test="contains($text, $replace)">
      <xsl:value-of select="substring-before($text,$replace)" />
      <xsl:value-of select="$by" />
      <xsl:call-template name="string-replace-all">
        <xsl:with-param name="text" select="substring-after($text,$replace)" />
        <xsl:with-param name="replace" select="$replace" />
        <xsl:with-param name="by" select="$by" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

и замените ваши replace_str вызовы примером из ответа

[ 111]

Теперь вашим предложениям when не нужна функция JScript identify_bin_type для поиска совпадений, вы можете использовать метод XSLT contains, чтобы найти совпадения для вас:

<xsl:when test="contains($Pass_Bin_Codes, $relevant-part)">
[1119 ] Это должно дать требуемый результат.

0
ответ дан Simply Ged 15 January 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: