Удаление пробелов и двойных кавычек между тегами XML

Если вы хотите, чтобы cdвел себя так, как вы ожидаете, позвоните:

cd -P c

и pwdнапечатают:

/home/user/b/c

То, что вы видите, является проблемой, вызванной тем фактом, что ваша оболочка следует неудачному решению POSIX и делает cd -Lзначением по умолчанию. Это заставляет оболочку запоминать кажущееся$PWD/home/user/c. Поскольку команда оболочки cd..не вызывает chdir(".."), а сокращает значение $PWDна один элемент, а затем chdir()указывает на этот сокращенный путь, cd..возвращает вас туда, откуда вы пришли.

Это угроза безопасности, так как люди склонны запускать, например,.:

ls../

и, будучи довольным результатом, можно запускать:

cd../; rm *.c

и удалите файлы, отличные от ожидаемых.

Обратите внимание, что POSIX по умолчанию смоделирован после поведения по умолчанию ksh88, и в то же время, когда ksh представил это поведение по умолчанию, AT&T решила реализовать более безопасный вариант cd -Pв качестве значения по умолчанию в Bourne Shell.

2
04.06.2020, 01:54
1 ответ

Вот преобразование XSLT 3.0, которое выполняет свою работу.

<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:mode on-no-match="shallow-copy"/>
  <xsl:template match="ns:tag2/text()" xmlns:ns="xxxxx">
      <xsl:value-of select="translate(., '&quot; ', '')"/>        
  </xsl:template>
</xsl:template>

Замените xxxxxфактическим URI пространства имен (, не показанным в вашем примере ).

Не пытайтесь обрабатывать XML на лексическом уровне с помощью инструментов, не поддерживающих -XML -, таких как sed. Мы видим сотни проблем на StackOverflow от людей, которым приходится справляться с плохим XML, неизменно создаваемым такими методами.

2
18.03.2021, 23:30

Теги

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